summaryrefslogtreecommitdiff
path: root/rust/kernel/time/git@git.tavy.me:linux.git
diff options
context:
space:
mode:
authorBreno Leitao <leitao@debian.org>2026-01-16 06:10:11 -0800
committerAndrew Morton <akpm@linux-foundation.org>2026-01-20 09:34:26 -0800
commit9bc9ccbf4c935852e4916081dbce4c25a585ec7d (patch)
treefaaa37dce1a036578c1c25a27b4c5f320d27efa0 /rust/kernel/time/git@git.tavy.me:linux.git
parentcb7d761bf5d4b1600564efdd42653b821eb2ec8e (diff)
mm/kfence: fix potential deadlock in reboot notifier
The reboot notifier callback can deadlock when calling cancel_delayed_work_sync() if toggle_allocation_gate() is blocked in wait_event_idle() waiting for allocations, that might not happen on shutdown path. The issue is that cancel_delayed_work_sync() waits for the work to complete, but the work is waiting for kfence_allocation_gate > 0 which requires allocations to happen (each allocation is increased by 1) - allocations that may have stopped during shutdown. Fix this by: 1. Using cancel_delayed_work() (non-sync) to avoid blocking. Now the callback succeeds and return. 2. Adding wake_up() to unblock any waiting toggle_allocation_gate() 3. Adding !kfence_enabled to the wait condition so the wake succeeds The static_branch_disable() IPI will still execute after the wake, but at this early point in shutdown (reboot notifier runs with INT_MAX priority), the system is still functional and CPUs can respond to IPIs. Link: https://lkml.kernel.org/r/20260116-kfence_fix-v1-1-4165a055933f@debian.org Fixes: ce2bba89566b ("mm/kfence: add reboot notifier to disable KFENCE on shutdown") Signed-off-by: Breno Leitao <leitao@debian.org> Reported-by: Chris Mason <clm@meta.com> Closes: https://lore.kernel.org/all/20260113140234.677117-1-clm@meta.com/ Reviewed-by: Marco Elver <elver@google.com> Cc: Alexander Potapenko <glider@google.com> Cc: Breno Leitao <leitao@debian.org> Cc: Chris Mason <clm@meta.com> Cc: Dmitriy Vyukov <dvyukov@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'rust/kernel/time/git@git.tavy.me:linux.git')
0 files changed, 0 insertions, 0 deletions