Skip to content
Snippets Groups Projects
  • Eric Biggers's avatar
    437499ee
    X.509: fix BUG_ON() when hash algorithm is unsupported · 437499ee
    Eric Biggers authored
    
    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: 6c2dc5ae ("X.509: Extract signature digest and make self-signed cert checks earlier")
    Reported-by: default avatarPaolo Valente <paolo.valente@linaro.org>
    Cc: Paolo Valente <paolo.valente@linaro.org>
    Cc: <stable@vger.kernel.org> # v4.7+
    Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    437499ee
    History
    X.509: fix BUG_ON() when hash algorithm is unsupported
    Eric Biggers authored
    
    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: 6c2dc5ae ("X.509: Extract signature digest and make self-signed cert checks earlier")
    Reported-by: default avatarPaolo Valente <paolo.valente@linaro.org>
    Cc: Paolo Valente <paolo.valente@linaro.org>
    Cc: <stable@vger.kernel.org> # v4.7+
    Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>