In the Linux kernel, the following vulnerability has been resolved:
netlink: fix potential deadlock in netlinkseterr()
syzbot reported a possible deadlock in netlinkseterr() [1]
A similar issue was fixed in commit 1d482e666b8e ("netlink: disable IRQs for netlinklocktable()") in netlinklocktable()
This patch adds IRQ safety to netlinkseterr() and _netlinkdiag_dump() which were not covered by cited commit.
[1]
WARNING: possible irq lock inversion dependency detected 6.4.0-rc6-syzkaller-00240-g4e9f0ec38852 #0 Not tainted
syz-executor.2/23011 just changed the state of lock: ffffffff8e1a7a58 (nltablelock){.+.?}-{2:2}, at: netlinkseterr+0x2e/0x3a0 net/netlink/afnetlink.c:1612 but this lock was taken by another, SOFTIRQ-safe lock in the past: (&local->queuestopreasonlock){..-.}-{2:2}
and interrupts could create inverse lock ordering between them.
other info that might help us debug this: Possible interrupt unsafe locking scenario:
CPU0 CPU1
---- ----
lock(nltablelock); localirqdisable(); lock(&local->queuestopreasonlock); lock(nltablelock); <Interrupt> lock(&local->queuestopreasonlock);
* DEADLOCK *