You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge tag 'modules-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux
Pull mudule updates from Rusty Russell: "We get rid of the general module prefix confusion with a binary config option, fix a remove/insert race which Never Happens, and (my favorite) handle the case when we have too many modules for a single commandline. Seriously, the kernel is full, please go away!" * tag 'modules-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux: modpost: fix unwanted VMLINUX_SYMBOL_STR expansion X.509: Support parse long form of length octets in Authority Key Identifier module: don't unlink the module until we've removed all exposure. kernel: kallsyms: memory override issue, need check destination buffer length MODSIGN: do not send garbage to stderr when enabling modules signature modpost: handle huge numbers of modules. modpost: add -T option to read module names from file/stdin. modpost: minor cleanup. genksyms: pass symbol-prefix instead of arch module: fix symbol versioning with symbol prefixes CONFIG_SYMBOL_PREFIX: cleanup.
This commit is contained in:
@@ -373,6 +373,9 @@ int rsa_extract_mpi(void *context, size_t hdrlen,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* The keyIdentifier in AuthorityKeyIdentifier SEQUENCE is tag(CONT,PRIM,0) */
|
||||
#define SEQ_TAG_KEYID (ASN1_CONT << 6)
|
||||
|
||||
/*
|
||||
* Process certificate extensions that are used to qualify the certificate.
|
||||
*/
|
||||
@@ -407,21 +410,57 @@ int x509_process_extension(void *context, size_t hdrlen,
|
||||
}
|
||||
|
||||
if (ctx->last_oid == OID_authorityKeyIdentifier) {
|
||||
size_t key_len;
|
||||
|
||||
/* Get hold of the CA key fingerprint */
|
||||
if (vlen < 5)
|
||||
return -EBADMSG;
|
||||
if (v[0] != (ASN1_SEQ | (ASN1_CONS << 5)) ||
|
||||
v[1] != vlen - 2 ||
|
||||
v[2] != (ASN1_CONT << 6) ||
|
||||
v[3] != vlen - 4)
|
||||
return -EBADMSG;
|
||||
v += 4;
|
||||
vlen -= 4;
|
||||
|
||||
f = kmalloc(vlen * 2 + 1, GFP_KERNEL);
|
||||
/* Authority Key Identifier must be a Constructed SEQUENCE */
|
||||
if (v[0] != (ASN1_SEQ | (ASN1_CONS << 5)))
|
||||
return -EBADMSG;
|
||||
|
||||
/* Authority Key Identifier is not indefinite length */
|
||||
if (unlikely(vlen == ASN1_INDEFINITE_LENGTH))
|
||||
return -EBADMSG;
|
||||
|
||||
if (vlen < ASN1_INDEFINITE_LENGTH) {
|
||||
/* Short Form length */
|
||||
if (v[1] != vlen - 2 ||
|
||||
v[2] != SEQ_TAG_KEYID ||
|
||||
v[3] > vlen - 4)
|
||||
return -EBADMSG;
|
||||
|
||||
key_len = v[3];
|
||||
v += 4;
|
||||
} else {
|
||||
/* Long Form length */
|
||||
size_t seq_len = 0;
|
||||
size_t sub = v[1] - ASN1_INDEFINITE_LENGTH;
|
||||
|
||||
if (sub > 2)
|
||||
return -EBADMSG;
|
||||
|
||||
/* calculate the length from subsequent octets */
|
||||
v += 2;
|
||||
for (i = 0; i < sub; i++) {
|
||||
seq_len <<= 8;
|
||||
seq_len |= v[i];
|
||||
}
|
||||
|
||||
if (seq_len != vlen - 2 - sub ||
|
||||
v[sub] != SEQ_TAG_KEYID ||
|
||||
v[sub + 1] > vlen - 4 - sub)
|
||||
return -EBADMSG;
|
||||
|
||||
key_len = v[sub + 1];
|
||||
v += (sub + 2);
|
||||
}
|
||||
|
||||
f = kmalloc(key_len * 2 + 1, GFP_KERNEL);
|
||||
if (!f)
|
||||
return -ENOMEM;
|
||||
for (i = 0; i < vlen; i++)
|
||||
for (i = 0; i < key_len; i++)
|
||||
sprintf(f + i * 2, "%02x", v[i]);
|
||||
pr_debug("authority %s\n", f);
|
||||
ctx->cert->authority = f;
|
||||
|
||||
Reference in New Issue
Block a user