lkml.org 
[lkml]   [2021]   [May]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.11 284/342] crypto: rng - fix crypto_rng_reset() refcounting when !CRYPTO_STATS
    Date
    From: Eric Biggers <ebiggers@google.com>

    commit 30d0f6a956fc74bb2e948398daf3278c6b08c7e9 upstream.

    crypto_stats_get() is a no-op when the kernel is compiled without
    CONFIG_CRYPTO_STATS, so pairing it with crypto_alg_put() unconditionally
    (as crypto_rng_reset() does) is wrong.

    Fix this by moving the call to crypto_stats_get() to just before the
    actual algorithm operation which might need it. This makes it always
    paired with crypto_stats_rng_seed().

    Fixes: eed74b3eba9e ("crypto: rng - Fix a refcounting bug in crypto_rng_reset()")
    Cc: stable@vger.kernel.org
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    crypto/rng.c | 10 +++-------
    1 file changed, 3 insertions(+), 7 deletions(-)

    --- a/crypto/rng.c
    +++ b/crypto/rng.c
    @@ -34,22 +34,18 @@ int crypto_rng_reset(struct crypto_rng *
    u8 *buf = NULL;
    int err;

    - crypto_stats_get(alg);
    if (!seed && slen) {
    buf = kmalloc(slen, GFP_KERNEL);
    - if (!buf) {
    - crypto_alg_put(alg);
    + if (!buf)
    return -ENOMEM;
    - }

    err = get_random_bytes_wait(buf, slen);
    - if (err) {
    - crypto_alg_put(alg);
    + if (err)
    goto out;
    - }
    seed = buf;
    }

    + crypto_stats_get(alg);
    err = crypto_rng_alg(tfm)->seed(tfm, seed, slen);
    crypto_stats_rng_seed(alg, err);
    out:

    \
     
     \ /
      Last update: 2021-05-10 14:31    [W:2.508 / U:2.572 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site