forked from luck/tmp_suning_uos_patched
crypto: algif_aead - Do not set MAY_BACKLOG on the async path
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: 83094e5e9e
("crypto: af_alg - add async support to...")
Cc: <stable@vger.kernel.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
2a05b029c1
commit
cbdad1f246
|
@ -78,7 +78,7 @@ static int crypto_aead_copy_sgl(struct crypto_sync_skcipher *null_tfm,
|
||||||
SYNC_SKCIPHER_REQUEST_ON_STACK(skreq, null_tfm);
|
SYNC_SKCIPHER_REQUEST_ON_STACK(skreq, null_tfm);
|
||||||
|
|
||||||
skcipher_request_set_sync_tfm(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);
|
NULL, NULL);
|
||||||
skcipher_request_set_crypt(skreq, src, dst, len, NULL);
|
skcipher_request_set_crypt(skreq, src, dst, len, NULL);
|
||||||
|
|
||||||
|
@ -291,19 +291,20 @@ static int _aead_recvmsg(struct socket *sock, struct msghdr *msg,
|
||||||
areq->outlen = outlen;
|
areq->outlen = outlen;
|
||||||
|
|
||||||
aead_request_set_callback(&areq->cra_u.aead_req,
|
aead_request_set_callback(&areq->cra_u.aead_req,
|
||||||
CRYPTO_TFM_REQ_MAY_BACKLOG,
|
CRYPTO_TFM_REQ_MAY_SLEEP,
|
||||||
af_alg_async_cb, areq);
|
af_alg_async_cb, areq);
|
||||||
err = ctx->enc ? crypto_aead_encrypt(&areq->cra_u.aead_req) :
|
err = ctx->enc ? crypto_aead_encrypt(&areq->cra_u.aead_req) :
|
||||||
crypto_aead_decrypt(&areq->cra_u.aead_req);
|
crypto_aead_decrypt(&areq->cra_u.aead_req);
|
||||||
|
|
||||||
/* AIO operation in progress */
|
/* AIO operation in progress */
|
||||||
if (err == -EINPROGRESS || err == -EBUSY)
|
if (err == -EINPROGRESS)
|
||||||
return -EIOCBQUEUED;
|
return -EIOCBQUEUED;
|
||||||
|
|
||||||
sock_put(sk);
|
sock_put(sk);
|
||||||
} else {
|
} else {
|
||||||
/* Synchronous operation */
|
/* Synchronous operation */
|
||||||
aead_request_set_callback(&areq->cra_u.aead_req,
|
aead_request_set_callback(&areq->cra_u.aead_req,
|
||||||
|
CRYPTO_TFM_REQ_MAY_SLEEP |
|
||||||
CRYPTO_TFM_REQ_MAY_BACKLOG,
|
CRYPTO_TFM_REQ_MAY_BACKLOG,
|
||||||
crypto_req_done, &ctx->wait);
|
crypto_req_done, &ctx->wait);
|
||||||
err = crypto_wait_req(ctx->enc ?
|
err = crypto_wait_req(ctx->enc ?
|
||||||
|
|
Loading…
Reference in New Issue
Block a user