mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-03-15 11:44:11 +00:00
crypto: essiv - Handle EBUSY correctly
[ Upstream commitb5a772adf4
] As it is essiv only handles the special return value of EINPROGERSS, which means that in all other cases it will free data related to the request. However, as the caller of essiv may specify MAY_BACKLOG, we also need to expect EBUSY and treat it in the same way. Otherwise backlogged requests will trigger a use-after-free. Fixes:be1eb7f78a
("crypto: essiv - create wrapper template...") Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Acked-by: Ard Biesheuvel <ardb@kernel.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
e9554cb5b9
commit
3fde8d53dd
1 changed files with 6 additions and 1 deletions
|
@ -171,7 +171,12 @@ static void essiv_aead_done(struct crypto_async_request *areq, int err)
|
|||
struct aead_request *req = areq->data;
|
||||
struct essiv_aead_request_ctx *rctx = aead_request_ctx(req);
|
||||
|
||||
if (err == -EINPROGRESS)
|
||||
goto out;
|
||||
|
||||
kfree(rctx->assoc);
|
||||
|
||||
out:
|
||||
aead_request_complete(req, err);
|
||||
}
|
||||
|
||||
|
@ -247,7 +252,7 @@ static int essiv_aead_crypt(struct aead_request *req, bool enc)
|
|||
err = enc ? crypto_aead_encrypt(subreq) :
|
||||
crypto_aead_decrypt(subreq);
|
||||
|
||||
if (rctx->assoc && err != -EINPROGRESS)
|
||||
if (rctx->assoc && err != -EINPROGRESS && err != -EBUSY)
|
||||
kfree(rctx->assoc);
|
||||
return err;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue