Skip to content

Commit 6459ae3

Browse files
ebiggersdhowells
authored andcommitted
PKCS#7: fix direct verification of SignerInfo signature
If none of the certificates in a SignerInfo's certificate chain match a trusted key, nor is the last certificate signed by a trusted key, then pkcs7_validate_trust_one() tries to check whether the SignerInfo's signature was made directly by a trusted key. But, it actually fails to set the 'sig' variable correctly, so it actually verifies the last signature seen. That will only be the SignerInfo's signature if the certificate chain is empty; otherwise it will actually be the last certificate's signature. This is not by itself a security problem, since verifying any of the certificates in the chain should be sufficient to verify the SignerInfo. Still, it's not working as intended so it should be fixed. Fix it by setting 'sig' correctly for the direct verification case. Fixes: 757932e ("PKCS#7: Handle PKCS#7 messages that contain no X.509 certs") Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: David Howells <dhowells@redhat.com>
1 parent 29f4a67 commit 6459ae3

File tree

1 file changed

+1
-0
lines changed

1 file changed

+1
-0
lines changed

crypto/asymmetric_keys/pkcs7_trust.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ static int pkcs7_validate_trust_one(struct pkcs7_message *pkcs7,
106106
pr_devel("sinfo %u: Direct signer is key %x\n",
107107
sinfo->index, key_serial(key));
108108
x509 = NULL;
109+
sig = sinfo->sig;
109110
goto matched;
110111
}
111112
if (PTR_ERR(key) != -ENOKEY)

0 commit comments

Comments
 (0)