lkml.org 
[lkml]   [2020]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 053/408] crypto: algif_aead - Do not set MAY_BACKLOG on the async path
    Date
    From: Herbert Xu <herbert@gondor.apana.org.au>

    commit cbdad1f246dd98e6c9c32a6e5212337f542aa7e0 upstream.

    The async path cannot use MAY_BACKLOG because it is not meant to
    block, which is what MAY_BACKLOG does. On the other hand, both
    the sync and async paths can make use of MAY_SLEEP.

    Fixes: 83094e5e9e49 ("crypto: af_alg - add async support to...")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    crypto/algif_aead.c | 7 ++++---
    1 file changed, 4 insertions(+), 3 deletions(-)

    --- a/crypto/algif_aead.c
    +++ b/crypto/algif_aead.c
    @@ -78,7 +78,7 @@ static int crypto_aead_copy_sgl(struct c
    SYNC_SKCIPHER_REQUEST_ON_STACK(skreq, null_tfm);

    skcipher_request_set_sync_tfm(skreq, null_tfm);
    - skcipher_request_set_callback(skreq, CRYPTO_TFM_REQ_MAY_BACKLOG,
    + skcipher_request_set_callback(skreq, CRYPTO_TFM_REQ_MAY_SLEEP,
    NULL, NULL);
    skcipher_request_set_crypt(skreq, src, dst, len, NULL);

    @@ -291,19 +291,20 @@ static int _aead_recvmsg(struct socket *
    areq->outlen = outlen;

    aead_request_set_callback(&areq->cra_u.aead_req,
    - CRYPTO_TFM_REQ_MAY_BACKLOG,
    + CRYPTO_TFM_REQ_MAY_SLEEP,
    af_alg_async_cb, areq);
    err = ctx->enc ? crypto_aead_encrypt(&areq->cra_u.aead_req) :
    crypto_aead_decrypt(&areq->cra_u.aead_req);

    /* AIO operation in progress */
    - if (err == -EINPROGRESS || err == -EBUSY)
    + if (err == -EINPROGRESS)
    return -EIOCBQUEUED;

    sock_put(sk);
    } else {
    /* Synchronous operation */
    aead_request_set_callback(&areq->cra_u.aead_req,
    + CRYPTO_TFM_REQ_MAY_SLEEP |
    CRYPTO_TFM_REQ_MAY_BACKLOG,
    crypto_req_done, &ctx->wait);
    err = crypto_wait_req(ctx->enc ?

    \
     
     \ /
      Last update: 2020-10-27 15:34    [W:4.130 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site