Re: [PATCH] net: caif: Fix a sleep-in-atomic bug in cfpkt_create_pfx

From: David Miller
Date: Sat Jun 10 2017 - 18:21:51 EST


From: Jia-Ju Bai <baijiaju1990@xxxxxxx>
Date: Sat, 10 Jun 2017 16:49:39 +0800

> The kernel may sleep under a rcu read lock in cfpkt_create_pfx, and the
> function call path is:
> cfcnfg_linkup_rsp (acquire the lock by rcu_read_lock)
> cfctrl_linkdown_req
> cfpkt_create
> cfpkt_create_pfx
> alloc_skb(GFP_KERNEL) --> may sleep
> cfserl_receive (acquire the lock by rcu_read_lock)
> cfpkt_split
> cfpkt_create_pfx
> alloc_skb(GFP_KERNEL) --> may sleep
>
> There is "in_interrupt" in cfpkt_create_pfx to decide use "GFP_KERNEL" or
> "GFP_ATOMIC". In this situation, "GFP_KERNEL" is used because the function
> is called under a rcu read lock, instead in interrupt.
>
> To fix it, only "GFP_ATOMIC" is used in cfpkt_create_pfx.
>
> Signed-off-by: Jia-Ju Bai <baijiaju1990@xxxxxxx>

Applied and queued up for -stable.