mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 14:41:39 +00:00
crypto: hisilicon/sec - fix the aead software fallback for engine
Due to the subreq pointer misuse the private context memory. The aead
soft crypto occasionally casues the OS panic as setting the 64K page.
Here is fix it.
Fixes: 6c46a3297b
("crypto: hisilicon/sec - add fallback tfm...")
Signed-off-by: Kai Ye <yekai13@huawei.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
1fb37b5692
commit
0a2a464f86
@ -2295,9 +2295,10 @@ static int sec_aead_soft_crypto(struct sec_ctx *ctx,
|
||||
struct aead_request *aead_req,
|
||||
bool encrypt)
|
||||
{
|
||||
struct aead_request *subreq = aead_request_ctx(aead_req);
|
||||
struct sec_auth_ctx *a_ctx = &ctx->a_ctx;
|
||||
struct device *dev = ctx->dev;
|
||||
struct aead_request *subreq;
|
||||
int ret;
|
||||
|
||||
/* Kunpeng920 aead mode not support input 0 size */
|
||||
if (!a_ctx->fallback_aead_tfm) {
|
||||
@ -2305,6 +2306,10 @@ static int sec_aead_soft_crypto(struct sec_ctx *ctx,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
subreq = aead_request_alloc(a_ctx->fallback_aead_tfm, GFP_KERNEL);
|
||||
if (!subreq)
|
||||
return -ENOMEM;
|
||||
|
||||
aead_request_set_tfm(subreq, a_ctx->fallback_aead_tfm);
|
||||
aead_request_set_callback(subreq, aead_req->base.flags,
|
||||
aead_req->base.complete, aead_req->base.data);
|
||||
@ -2312,8 +2317,13 @@ static int sec_aead_soft_crypto(struct sec_ctx *ctx,
|
||||
aead_req->cryptlen, aead_req->iv);
|
||||
aead_request_set_ad(subreq, aead_req->assoclen);
|
||||
|
||||
return encrypt ? crypto_aead_encrypt(subreq) :
|
||||
crypto_aead_decrypt(subreq);
|
||||
if (encrypt)
|
||||
ret = crypto_aead_encrypt(subreq);
|
||||
else
|
||||
ret = crypto_aead_decrypt(subreq);
|
||||
aead_request_free(subreq);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int sec_aead_crypto(struct aead_request *a_req, bool encrypt)
|
||||
|
Loading…
Reference in New Issue
Block a user