| From e8f4ae85439f34bec3b0ab69223a41809dab28c9 Mon Sep 17 00:00:00 2001 |
| From: Jia-Ju Bai <baijiaju1990@163.com> |
| Date: Wed, 31 May 2017 09:40:11 +0800 |
| Subject: isdn: Fix a sleep-in-atomic bug |
| |
| From: Jia-Ju Bai <baijiaju1990@163.com> |
| |
| commit e8f4ae85439f34bec3b0ab69223a41809dab28c9 upstream. |
| |
| The driver may sleep under a spin lock, the function call path is: |
| isdn_ppp_mp_receive (acquire the lock) |
| isdn_ppp_mp_reassembly |
| isdn_ppp_push_higher |
| isdn_ppp_decompress |
| isdn_ppp_ccp_reset_trans |
| isdn_ppp_ccp_reset_alloc_state |
| kzalloc(GFP_KERNEL) --> may sleep |
| |
| To fixed it, the "GFP_KERNEL" is replaced with "GFP_ATOMIC". |
| |
| Signed-off-by: Jia-Ju Bai <baijiaju1990@163.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Amit Pundir <amit.pundir@linaro.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/isdn/i4l/isdn_ppp.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/isdn/i4l/isdn_ppp.c |
| +++ b/drivers/isdn/i4l/isdn_ppp.c |
| @@ -2364,7 +2364,7 @@ static struct ippp_ccp_reset_state *isdn |
| id); |
| return NULL; |
| } else { |
| - rs = kzalloc(sizeof(struct ippp_ccp_reset_state), GFP_KERNEL); |
| + rs = kzalloc(sizeof(struct ippp_ccp_reset_state), GFP_ATOMIC); |
| if (!rs) |
| return NULL; |
| rs->state = CCPResetIdle; |