Medium · published September 11, 2025
In the Linux kernel, the following vulnerability has been resolved:
mm/kmemleak: avoid deadlock by moving pr_warn() outside kmemleak_lock
When netpoll is enabled, calling pr_warn_once() while holding
kmemleak_lock in mem_pool_alloc() can cause a deadlock due to lock
inversion with the netconsole subsystem. This occurs because
pr_warn_once() may trigger netpoll, which eventually leads to
__alloc_skb() and back into kmemleak code, attempting to reacquire
kmemleak_lock.
This is the path for the deadlock.
mem_pool_alloc()
-> raw_spin_lock_irqsave(&kmemleak_lock, flags);
-> pr_warn_once()
-> netconsole subsystem
-> netpoll
-> __alloc_skb
-> __create_object
-> raw_spin_lock_irqsave(&kmemleak_lock, flags);
Fix this by setting a flag and issuing the pr_warn_once() after
kmemleak_lock is released.
| Product | Versions | Fixed in |
|---|---|---|
| linux/linux_kernel | ≥ 5.4, < 5.4.297 | 5.4.297 |
| linux/linux_kernel | ≥ 5.5, < 5.10.241 | 5.10.241 |
| linux/linux_kernel | ≥ 5.11, < 5.15.190 | 5.15.190 |
| linux/linux_kernel | ≥ 5.16, < 6.1.149 | 6.1.149 |
| linux/linux_kernel | ≥ 6.2, < 6.6.103 | 6.6.103 |
| linux/linux_kernel | ≥ 6.7, < 6.12.43 | 6.12.43 |
| linux/linux_kernel | ≥ 6.13, < 6.15.11 | 6.15.11 |
| linux/linux_kernel | ≥ 6.16, < 6.16.2 | 6.16.2 |
| linux/linux_kernel | all versions | — |
| debian/debian_linux | all versions | — |