lib/oid_registry.c
Source file repositories/reference/linux-study-clean/lib/oid_registry.c
File Facts
- System
- Linux kernel
- Corpus path
lib/oid_registry.c- Extension
.c- Size
- 3979 bytes
- Lines
- 176
- Domain
- Kernel Services
- Bucket
- lib
- Inferred role
- Kernel Services: exported/initcall integration point
- Status
- integration implementation candidate
Why This File Exists
Shared kernel service surface used by multiple subsystems, including helpers, cryptography, virtualization support, and async I/O infrastructure.
- Shared kernel service surface used by multiple subsystems, including helpers, cryptography, virtualization support, and async I/O infrastructure.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
Dependency Surface
linux/module.hlinux/export.hlinux/oid_registry.hlinux/kernel.hlinux/errno.hlinux/bug.hlinux/asn1.hoid_registry_data.c
Detected Declarations
function look_up_OIDfunction parse_OIDfunction sprint_oidexport look_up_OIDexport parse_OIDexport sprint_oid
Annotated Snippet
if (xhash > hash) {
k = j;
continue;
}
if (xhash < hash) {
i = j + 1;
continue;
}
oid = oid_search_table[j].oid;
len = oid_index[oid + 1] - oid_index[oid];
if (len > datasize) {
k = j;
continue;
}
if (len < datasize) {
i = j + 1;
continue;
}
/* Variation is most likely to be at the tail end of the
* OID, so do the comparison in reverse.
*/
while (len > 0) {
unsigned char a = oid_data[oid_index[oid] + --len];
unsigned char b = octets[len];
if (a > b) {
k = j;
goto next;
}
if (a < b) {
i = j + 1;
goto next;
}
}
return oid;
next:
;
}
return OID__NR;
}
EXPORT_SYMBOL_GPL(look_up_OID);
/**
* parse_OID - Parse an OID from a bytestream
* @data: Binary representation of the header + OID
* @datasize: Size of the binary representation
* @oid: Pointer to oid to return result
*
* Parse an OID from a bytestream that holds the OID in the format
* ASN1_OID | length | oid. The length indicator must equal to datasize - 2.
* -EBADMSG is returned if the bytestream is too short.
*/
int parse_OID(const void *data, size_t datasize, enum OID *oid)
{
const unsigned char *v = data;
/* we need 2 bytes of header and at least 1 byte for oid */
if (datasize < 3 || v[0] != ASN1_OID || v[1] != datasize - 2)
return -EBADMSG;
*oid = look_up_OID(data + 2, datasize - 2);
return 0;
}
EXPORT_SYMBOL_GPL(parse_OID);
/*
* sprint_oid - Print an Object Identifier into a buffer
* @data: The encoded OID to print
* @datasize: The size of the encoded OID
* @buffer: The buffer to render into
* @bufsize: The size of the buffer
*
* The OID is rendered into the buffer in "a.b.c.d" format and the number of
* bytes is returned. -EBADMSG is returned if the data could not be interpreted
* and -ENOBUFS if the buffer was too small.
*/
int sprint_oid(const void *data, size_t datasize, char *buffer, size_t bufsize)
{
const unsigned char *v = data, *end = v + datasize;
unsigned long num;
unsigned char n;
size_t ret;
int count;
if (v >= end)
goto bad;
n = *v++;
Annotation
- Immediate include surface: `linux/module.h`, `linux/export.h`, `linux/oid_registry.h`, `linux/kernel.h`, `linux/errno.h`, `linux/bug.h`, `linux/asn1.h`, `oid_registry_data.c`.
- Detected declarations: `function look_up_OID`, `function parse_OID`, `function sprint_oid`, `export look_up_OID`, `export parse_OID`, `export sprint_oid`.
- Atlas domain: Kernel Services / lib.
- Implementation status: integration implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.