CVE-2026-89759

mm/kmemleak: avoid soft lockup when scanning task stacks

State
Published
Severity
Not scored
Published
Sep 11, 2026
Updated
Oct 30, 2026
Reserved
Sep 11, 2026

Read the record on cve.org

Description

In the Linux kernel, the following vulnerability has been resolved:

mm/kmemleak: avoid soft lockup when scanning task stacks

Patch series "mm/kmemleak: avoid soft lockup when scanning task", v3.

kmemleak_scan() scans every task stack under one rcu_read_lock() with no reschedule point, which can trip the soft lockup watchdog on hosts with very many threads.

That prints the following message, depending on the workload+host configuration:

watchdog: BUG: soft lockup - CPU#35 stuck for 22s! [kmemleak:537] scan_block kmemleak_scan kmemleak_scan_thread kthread

Patch 1 walks the tasks with find_ge_pid() so the scan reschedules between tasks

Patches 2-3 let the scan loops stop early once a scan is interrupted.

This patch (of 3):

kmemleak_scan() walks every thread and scans its kernel stack under a single rcu_read_lock() with no reschedule point. On a host with very many threads -- amplified by KASAN/lockdep in debug builds -- this loop can hog a CPU long enough to trip the soft lockup watchdog:

watchdog: BUG: soft lockup - CPU#35 stuck for 22s! [kmemleak:537] scan_block kmemleak_scan kmemleak_scan_thread kthread

A cond_resched() cannot be added directly: the loop runs inside an RCU read-side critical section.

Walk the tasks one PID at a time with find_ge_pid(), taking the RCU read lock only to look up and pin each task. The stack is then scanned with no lock held, so cond_resched() runs between tasks and the scan stops early on scan_should_stop(). This follows the next_tgid()/task_seq_get_next() iteration pattern and keeps each RCU critical section short.

Scores

The record has no CVSS score.

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • c4b28963fd79457315783b3b0f21c01eb88cfdc1 to before 2567818c2776d0a820506c3612261d9e24af7164Affected
  • c4b28963fd79457315783b3b0f21c01eb88cfdc1 to before f1cd6c4c35243377882c47236281d03ee3be6eebAffected
  • c4b28963fd79457315783b3b0f21c01eb88cfdc1 to before 9a1b12c06c192290b8479de48f66f1e75d89c4b7Affected
  • c4b28963fd79457315783b3b0f21c01eb88cfdc1 to before 3fc8044251de21555fb02c365fa681bab8b0db55Affected
  • c4b28963fd79457315783b3b0f21c01eb88cfdc1 to before 1838c704bcb4fd3556cf67513c6f97a39099e35cAffected
  • c4b28963fd79457315783b3b0f21c01eb88cfdc1 to before 5d10d4e19e6daa487f0cd0ea6cba472325de92f9Affected
LinuxLinux
  • 5.10Affected
  • before 5.10Not affected
  • 6.1.191 through 6.1.*Not affected
  • 6.6.160 through 6.6.*Not affected
  • 6.12.109 through 6.12.*Not affected
  • 6.18.50 through 6.18.*Not affected
  • 7.2.4 through 7.2.*Not affected
  • 7.3 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.