| From 18b7d6edad4f4aeaea335a2a270f7115627f856c Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 21 Feb 2022 12:08:29 +0000 |
| Subject: crypto: sun8i-ss - call finalize with bh disabled |
| |
| From: Corentin Labbe <clabbe@baylibre.com> |
| |
| [ Upstream commit b169b3766242b6f3336e24a6c8ee1522978b57a7 ] |
| |
| Doing ipsec produces a spinlock recursion warning. |
| This is due to not disabling BH during crypto completion function. |
| |
| Fixes: f08fcced6d00 ("crypto: allwinner - Add sun8i-ss cryptographic offloader") |
| Signed-off-by: Corentin Labbe <clabbe@baylibre.com> |
| Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/crypto/allwinner/sun8i-ss/sun8i-ss-cipher.c | 3 +++ |
| drivers/crypto/allwinner/sun8i-ss/sun8i-ss-hash.c | 3 +++ |
| 2 files changed, 6 insertions(+) |
| |
| diff --git a/drivers/crypto/allwinner/sun8i-ss/sun8i-ss-cipher.c b/drivers/crypto/allwinner/sun8i-ss/sun8i-ss-cipher.c |
| index 9ef1c85c4aaa..554e400d41ca 100644 |
| --- a/drivers/crypto/allwinner/sun8i-ss/sun8i-ss-cipher.c |
| +++ b/drivers/crypto/allwinner/sun8i-ss/sun8i-ss-cipher.c |
| @@ -11,6 +11,7 @@ |
| * You could find a link for the datasheet in Documentation/arm/sunxi.rst |
| */ |
| |
| +#include <linux/bottom_half.h> |
| #include <linux/crypto.h> |
| #include <linux/dma-mapping.h> |
| #include <linux/io.h> |
| @@ -274,7 +275,9 @@ static int sun8i_ss_handle_cipher_request(struct crypto_engine *engine, void *ar |
| struct skcipher_request *breq = container_of(areq, struct skcipher_request, base); |
| |
| err = sun8i_ss_cipher(breq); |
| + local_bh_disable(); |
| crypto_finalize_skcipher_request(engine, breq, err); |
| + local_bh_enable(); |
| |
| return 0; |
| } |
| diff --git a/drivers/crypto/allwinner/sun8i-ss/sun8i-ss-hash.c b/drivers/crypto/allwinner/sun8i-ss/sun8i-ss-hash.c |
| index 3c073eb3db03..1a71ed49d233 100644 |
| --- a/drivers/crypto/allwinner/sun8i-ss/sun8i-ss-hash.c |
| +++ b/drivers/crypto/allwinner/sun8i-ss/sun8i-ss-hash.c |
| @@ -9,6 +9,7 @@ |
| * |
| * You could find the datasheet in Documentation/arm/sunxi.rst |
| */ |
| +#include <linux/bottom_half.h> |
| #include <linux/dma-mapping.h> |
| #include <linux/pm_runtime.h> |
| #include <linux/scatterlist.h> |
| @@ -442,6 +443,8 @@ int sun8i_ss_hash_run(struct crypto_engine *engine, void *breq) |
| theend: |
| kfree(pad); |
| kfree(result); |
| + local_bh_disable(); |
| crypto_finalize_hash_request(engine, breq, err); |
| + local_bh_enable(); |
| return 0; |
| } |
| -- |
| 2.34.1 |
| |