CVE-2024-36888: workqueue: Fix selection of wake_cpu in kick_pool()
In the Linux kernel, the following vulnerability has been resolved:
workqueue: Fix selection of wake_cpu in kick_pool()
With cpu_possible_mask=0-63 and cpu_online_mask=0-7 the following
kernel oops was observed:
smp: Bringing up secondary CPUs ...
smp: Brought up 1 node, 8 CPUs
Unable to handle kernel pointer dereference in virtual kernel address space
Failing address: 0000000000000000 TEID: 0000000000000803
[..]
Call Trace:
arch_vcpu_is_preempted+0x12/0x80
select_idle_sibling+0x42/0x560
select_task_rq_fair+0x29a/0x3b0
try_to_wake_up+0x38e/0x6e0
kick_pool+0xa4/0x198
__queue_work.part.0+0x2bc/0x3a8
call_timer_fn+0x36/0x160
__run_timers+0x1e2/0x328
__run_timer_base+0x5a/0x88
run_timer_softirq+0x40/0x78
__do_softirq+0x118/0x388
irq_exit_rcu+0xc0/0xd8
do_ext_irq+0xae/0x168
ext_int_handler+0xbe/0xf0
psw_idle_exit+0x0/0xc
default_idle_call+0x3c/0x110
do_idle+0xd4/0x158
cpu_startup_entry+0x40/0x48
rest_init+0xc6/0xc8
start_kernel+0x3c4/0x5e0
startup_continue+0x3c/0x50
The crash is caused by calling arch_vcpu_is_preempted() for an offline
CPU. To avoid this, select the cpu with cpumask_any_and_distribute()
to mask __pod_cpumask with cpu_online_mask. In case no cpu is left in
the pool, skip the assignment.
tj: This doesn't fully fix the bug as CPUs can still go down between picking
the target CPU and the wake call. Fixing that likely requires adding
cpu_online() test to either the sched or s390 arch code. However, regardless
of how that is fixed, workqueue shouldn't be picking a CPU which isn't
online as that would result in unpredictable and worse behavior.
Security readout for executives and security teams
Plain-English summary
CVE-2024-36888 is a Linux kernel availability bug. Under certain CPU online/offline configurations, the workqueue code can select an offline CPU and trigger a kernel crash. The published impact is denial of service, not data theft or code execution.
Executive priority
Handle through normal kernel patch governance, with higher priority where local denial of service would affect critical services or shared infrastructure. This is not evidenced as internet-exploited, but a kernel crash can still cause business disruption.
Technical view
The flaw is a NULL pointer dereference in Linux workqueue kick_pool() CPU selection. With possible CPUs exceeding online CPUs, the kernel may call arch_vcpu_is_preempted() for an offline CPU. Upstream fixed selection by masking with cpu_online_mask, while noting a remaining race may need scheduler or s390 handling.
Likely exposure
Exposure is most likely on Linux systems running affected kernel versions around 6.6, 6.8.10, and 6.9 with CPU hotplug, virtualization, or configurations where many CPUs are possible but not online. Distribution backports may change version-based conclusions, so confirm using vendor kernel advisories.
Exploitation context
The CVSS vector is local, low complexity, no privileges, no user interaction, with high availability impact. The provided sources do not show active exploitation, and KEV is false. Treat this as a local denial-of-service risk rather than a remote compromise issue.
Researcher notes
The source describes a specific crash path and fix direction, but also states the patch does not fully eliminate a race where CPUs go offline after selection. Research should focus on downstream backports, architecture-specific behavior, and whether later scheduler or s390 fixes were issued.
Mitigation direction
Update affected Linux kernels to vendor releases containing the upstream stable fixes.
Check Linux distribution advisories for backported fixes and supported kernel package names.
Prioritize highly available, multi-tenant, virtualized, or CPU hotplug-capable systems.
Monitor for follow-up kernel fixes because upstream notes a remaining CPU-offline race.
Avoid relying only on mainline version strings when distributions backport patches.
Validation and detection
Inventory running kernel versions and map them to distribution CVE advisories.
Confirm deployed kernels include one of the referenced upstream stable commits or equivalent backport.
Review kernel logs for oops traces involving kick_pool(), try_to_wake_up(), or arch_vcpu_is_preempted().
Validate CPU possible and online masks on impacted platforms during maintenance review.
Track whether vendors publish additional scheduler or s390 follow-up fixes.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cwe · low confidence lookup
CWE-476: Exact CWE lookup
Use the exact CWE identifier as the starting point before reviewing related ATT&CK behavior. Open the exact CWE lookup page first, then review the ATT&CK searches from that MITRE weakness context. This is a Glexia lookup hint, not an official ATT&CK mapping.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.
We collect every scored CVSS vector available in the official CNA and ADP containers. When more than one version is present, the table keeps the source vectors side by side instead of collapsing them into the highest score.
CWE links open Glexia weakness intelligence pages with official CWE context, developer remediation guidance, and related CVE mappings.
CWE-476 · source CWE mapping
NULL Pointer Dereference
NULL Pointer Dereference represents a recurring weakness pattern that can create exploitable paths when design, validation, or implementation controls are missing.