[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <1506997522-26684-1-git-send-email-baijiaju1990@163.com>
Date: Tue, 3 Oct 2017 10:25:22 +0800
From: Jia-Ju Bai <baijiaju1990@....com>
To: davem@...emloft.net, herbert@...dor.apana.org.au,
nhorman@...driver.com, vyasevich@...il.com, luto@...nel.org,
kvalo@...eaurora.org
Cc: linux-crypto@...r.kernel.org, netdev@...r.kernel.org,
linux-sctp@...r.kernel.org, linux-wireless@...r.kernel.org,
Jia-Ju Bai <baijiaju1990@....com>
Subject: [PATCH V2] Fix a sleep-in-atomic bug in shash_setkey_unaligned
The SCTP program may sleep under a spinlock, and the function call path is:
sctp_generate_t3_rtx_event (acquire the spinlock)
sctp_do_sm
sctp_side_effects
sctp_cmd_interpreter
sctp_make_init_ack
sctp_pack_cookie
crypto_shash_setkey
shash_setkey_unaligned
kmalloc(GFP_KERNEL)
For the same reason, the orinoco driver may sleep in interrupt handler,
and the function call path is:
orinoco_rx_isr_tasklet
orinoco_rx
orinoco_mic
crypto_shash_setkey
shash_setkey_unaligned
kmalloc(GFP_KERNEL)
To fix it, GFP_KERNEL is replaced with GFP_ATOMIC.
This bug is found by my static analysis tool and my code review.
Signed-off-by: Jia-Ju Bai <baijiaju1990@....com>
---
crypto/shash.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/crypto/shash.c b/crypto/shash.c
index 5e31c8d..8fcecc6 100644
--- a/crypto/shash.c
+++ b/crypto/shash.c
@@ -41,7 +41,7 @@ static int shash_setkey_unaligned(struct crypto_shash *tfm, const u8 *key,
int err;
absize = keylen + (alignmask & ~(crypto_tfm_ctx_alignment() - 1));
- buffer = kmalloc(absize, GFP_KERNEL);
+ buffer = kmalloc(absize, GFP_ATOMIC);
if (!buffer)
return -ENOMEM;
--
1.7.9.5
Powered by blists - more mailing lists