Messages in this thread | | | Subject | Re: [PATCH RESEND] net/cisco: Fix a sleep-in-atomic-context bug in enic_init_affinity_hint() | From | Kaige Li <> | Date | Wed, 24 Jun 2020 10:07:16 +0800 |
| |
On 06/24/2020 04:50 AM, Jakub Kicinski wrote: > On Tue, 23 Jun 2020 16:13:09 +0800 Kaige Li wrote: >> The kernel module may sleep with holding a spinlock. >> >> The function call paths (from bottom to top) are: >> >> [FUNC] zalloc_cpumask_var(GFP_KERNEL) >> drivers/net/ethernet/cisco/enic/enic_main.c, 125: zalloc_cpumask_var in enic_init_affinity_hint >> drivers/net/ethernet/cisco/enic/enic_main.c, 1918: enic_init_affinity_hint in enic_open >> drivers/net/ethernet/cisco/enic/enic_main.c, 2348: enic_open in enic_reset >> drivers/net/ethernet/cisco/enic/enic_main.c, 2341: spin_lock in enic_reset >> >> To fix this bug, GFP_KERNEL is replaced with GFP_ATOMIC. >> >> Signed-off-by: Kaige Li <likaige@loongson.cn> > I don't think this is sufficient. Calling open with a spin lock held > seems like a very bad idea. At a quick look the driver also calls > request_irq() from open - request_irq() can sleep.
You are right. Should I do spin_unlock before the enic_open, or remove spin_lock in enic_reset?
Thank you.
| |