Skip to content

Commit

Permalink
X.509: fix BUG_ON() when hash algorithm is unsupported
Browse files Browse the repository at this point in the history
The X.509 parser mishandles the case where the certificate's signature's
hash algorithm is not available in the crypto API.  In this case,
x509_get_sig_params() doesn't allocate the cert->sig->digest buffer;
this part seems to be intentional.  However,
public_key_verify_signature() is still called via
x509_check_for_self_signed(), which triggers the 'BUG_ON(!sig->digest)'.

Fix this by making public_key_verify_signature() return -ENOPKG if the
hash buffer has not been allocated.

Reproducer when all the CONFIG_CRYPTO_SHA512* options are disabled:

    openssl req -new -sha512 -x509 -batch -nodes -outform der \
        | keyctl padd asymmetric desc @s

Fixes: 6c2dc5a ("X.509: Extract signature digest and make self-signed cert checks earlier")
Reported-by: Paolo Valente <[email protected]>
Cc: Paolo Valente <[email protected]>
Cc: <[email protected]> # v4.7+
Signed-off-by: Eric Biggers <[email protected]>
Signed-off-by: David Howells <[email protected]>
  • Loading branch information
ebiggers authored and dhowells committed Feb 22, 2018
1 parent 6459ae3 commit 437499e
Showing 1 changed file with 3 additions and 1 deletion.
4 changes: 3 additions & 1 deletion crypto/asymmetric_keys/public_key.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,11 @@ int public_key_verify_signature(const struct public_key *pkey,

BUG_ON(!pkey);
BUG_ON(!sig);
BUG_ON(!sig->digest);
BUG_ON(!sig->s);

if (!sig->digest)
return -ENOPKG;

alg_name = sig->pkey_algo;
if (strcmp(sig->pkey_algo, "rsa") == 0) {
/* The data wangled by the RSA algorithm is typically padded
Expand Down

0 comments on commit 437499e

Please sign in to comment.