lkml.org 
[lkml]   [2018]   [Jun]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 05/11] crypto: ahash: Remove VLA usage
    Date
    In the quest to remove all stack VLA usage from the kernel[1], this
    introduces max size macros for ahash, as already done for shash, and
    adjust the crypto user to max state size.

    [1] https://lkml.kernel.org/r/CA+55aFzCG-zNmZwX4A2FQpadafLfEzK6CC=qPXydAacU1RqZWA@mail.gmail.com

    Cc: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: linux-crypto@vger.kernel.org
    Signed-off-by: Kees Cook <keescook@chromium.org>
    ---
    crypto/ahash.c | 4 ++--
    crypto/algif_hash.c | 2 +-
    include/crypto/hash.h | 3 +++
    3 files changed, 6 insertions(+), 3 deletions(-)

    diff --git a/crypto/ahash.c b/crypto/ahash.c
    index a64c143165b1..6435bdbe42fd 100644
    --- a/crypto/ahash.c
    +++ b/crypto/ahash.c
    @@ -550,8 +550,8 @@ static int ahash_prepare_alg(struct ahash_alg *alg)
    {
    struct crypto_alg *base = &alg->halg.base;

    - if (alg->halg.digestsize > PAGE_SIZE / 8 ||
    - alg->halg.statesize > PAGE_SIZE / 8 ||
    + if (alg->halg.digestsize > AHASH_MAX_DIGESTSIZE ||
    + alg->halg.statesize > AHASH_MAX_STATESIZE ||
    alg->halg.statesize == 0)
    return -EINVAL;

    diff --git a/crypto/algif_hash.c b/crypto/algif_hash.c
    index bfcf595fd8f9..8974ee8ebead 100644
    --- a/crypto/algif_hash.c
    +++ b/crypto/algif_hash.c
    @@ -239,7 +239,7 @@ static int hash_accept(struct socket *sock, struct socket *newsock, int flags,
    struct alg_sock *ask = alg_sk(sk);
    struct hash_ctx *ctx = ask->private;
    struct ahash_request *req = &ctx->req;
    - char state[crypto_ahash_statesize(crypto_ahash_reqtfm(req)) ? : 1];
    + char state[AHASH_MAX_STATESIZE];
    struct sock *sk2;
    struct alg_sock *ask2;
    struct hash_ctx *ctx2;
    diff --git a/include/crypto/hash.h b/include/crypto/hash.h
    index 804e87a9510e..5d79e2f0936e 100644
    --- a/include/crypto/hash.h
    +++ b/include/crypto/hash.h
    @@ -64,6 +64,9 @@ struct ahash_request {
    void *__ctx[] CRYPTO_MINALIGN_ATTR;
    };

    +#define AHASH_MAX_DIGESTSIZE 512
    +#define AHASH_MAX_STATESIZE 512
    +
    #define AHASH_REQUEST_ON_STACK(name, ahash) \
    char __##name##_desc[sizeof(struct ahash_request) + \
    crypto_ahash_reqsize(ahash)] CRYPTO_MINALIGN_ATTR; \
    --
    2.17.1
    \
     
     \ /
      Last update: 2018-06-25 23:12    [W:5.286 / U:0.124 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site