lkml.org 
[lkml]   [2018]   [Feb]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.15 11/64] X.509: fix BUG_ON() when hash algorithm is unsupported
    Date
    4.15-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Eric Biggers <ebiggers@google.com>

    commit 437499eea4291ae9621e8763a41df027c110a1ef upstream.

    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: 6c2dc5ae4ab7 ("X.509: Extract signature digest and make self-signed cert checks earlier")
    Reported-by: Paolo Valente <paolo.valente@linaro.org>
    Cc: Paolo Valente <paolo.valente@linaro.org>
    Cc: <stable@vger.kernel.org> # v4.7+
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    crypto/asymmetric_keys/public_key.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    --- a/crypto/asymmetric_keys/public_key.c
    +++ b/crypto/asymmetric_keys/public_key.c
    @@ -79,9 +79,11 @@ int public_key_verify_signature(const st

    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

    \
     
     \ /
      Last update: 2018-02-26 21:45    [W:5.430 / U:0.488 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site