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

sched_ext: Fix CPU hotplug hang when a dying CPU's tasks sit in the BPF scheduler

A CPU going down has to empty its own rq. Its hotplug thread waits in
sched_cpu_wait_empty() until nothing else is left, and the only thing that
wakes it is balance_push(), which runs from __schedule() on the dying CPU
and pushes off the migratable tasks the CPU picks.

sched_ext breaks this. A task sitting on a user DSQ or held by the BPF
scheduler is still counted on its rq, but an inactive CPU no longer calls
ops.dispatch() and can't pull the task back. The dying CPU goes idle with
the task still counted, and one of two things happens:

- Another CPU consumes the task. The rq empties without a __schedule() on
the dying CPU, so the hotplug thread is never woken and cpu_down() hangs
holding cpu_hotplug_lock.
- The task is affine only to the dying CPU. Nothing can move it, and the
offline stalls until the watchdog ejects the BPF scheduler.

When the rq goes offline, re-enqueue every task on it that isn't already on
the local DSQ. An enqueue on an offline rq lands on the local DSQ, so the
dying CPU itself picks the tasks and balance_push() pushes them off, the
same as for the other sched classes. From then on no sched_ext path on
another CPU can pull a task off the rq.

ops.dispatch() currently stops as soon as the CPU goes inactive, and CPU
hotplug then waits for an RCU grace period before taking the rq offline. A
BPF-held task affine only to the dying CPU and preempted inside an RCU
read-side critical section would block that grace period, and the rq would
never go offline. Test SCX_RQ_ONLINE directly so that ops.dispatch() keeps
running until the rq goes offline. Only the dying CPU's own hotplug thread
clears the flag during teardown, and task_can_run_on_remote_rq() still keeps
other rqs' tasks off the CPU.
Published: 2026-10-23
Score: 4.1 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Denial of Service through CPU hotplug hang
Action: Update Kernel
AI Analysis

Impact

The Linux kernel scheduler contains a flaw that occurs when a CPU is removed while tasks are residing in the BPF scheduler or user DSQ. The hotplug thread waits for the per-CPU run queue to become empty, but the CPU stops dispatching tasks once it becomes inactive, leaving tasks still counted on its run queue. This can lead to the hotplug thread never being woken, causing the kernel to hold the cpu_hotplug_lock indefinitely and the system to hang during a CPU hotplug operation. The issue is an ordering bug that creates a deadlock condition within the CPU hotplug logic.

Affected Systems

All Linux kernel implementations are affected; the vulnerability applies to every kernel version prior to the official fix. No specific version campaign is listed, so any system running an unpatched kernel may encounter the problem when performing CPU hotplug operations or triggering CPU removal via sysfs or the kernel watchdog.

Risk and Exploitability

Because the flaw manifests internally within the kernel scheduler, it does not expose a remote code execution vector. However, the resulting hang defeats normal system operation and can be exploited by a local user with sufficient privileged access to trigger CPU hotplug requests, leading to a denial of service. The CVSS score is 4.1 and the EPSS score is < 1%. The exploit requires local privileges and an unpatched kernel; no public exploit is listed. Without a patch, a system could become unavailable for CPU hotplug or recover only after a reboot or watchdog reset. The KEV status is not listed, indicating no known widespread exploitation at time of publication.

Generated by OpenCVE AI on October 27, 2026 at 13:53 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Apply the kernel patch that addresses the CPU hotplug hang fix
  • Reboot the system to clear any stale CPU hotplug threads or locks
  • Disable dynamic CPU hotplug in the kernel configuration until the patch is applied

Generated by OpenCVE AI on October 27, 2026 at 13:53 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Tue, 27 Oct 2026 12:30:00 +0000

Type Values Removed Values Added
Weaknesses CWE-833
References
Metrics threat_severity

None

cvssV3_1

{'score': 4.1, 'vector': 'CVSS:3.1/AV:L/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:H'}

threat_severity

Moderate


Sat, 24 Oct 2026 01:15:00 +0000

Type Values Removed Values Added
First Time appeared Linux linux
Vendors & Products Linux linux

Fri, 23 Oct 2026 17:30:00 +0000

Type Values Removed Values Added
Weaknesses CWE-1135

Fri, 23 Oct 2026 13:00:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: sched_ext: Fix CPU hotplug hang when a dying CPU's tasks sit in the BPF scheduler A CPU going down has to empty its own rq. Its hotplug thread waits in sched_cpu_wait_empty() until nothing else is left, and the only thing that wakes it is balance_push(), which runs from __schedule() on the dying CPU and pushes off the migratable tasks the CPU picks. sched_ext breaks this. A task sitting on a user DSQ or held by the BPF scheduler is still counted on its rq, but an inactive CPU no longer calls ops.dispatch() and can't pull the task back. The dying CPU goes idle with the task still counted, and one of two things happens: - Another CPU consumes the task. The rq empties without a __schedule() on the dying CPU, so the hotplug thread is never woken and cpu_down() hangs holding cpu_hotplug_lock. - The task is affine only to the dying CPU. Nothing can move it, and the offline stalls until the watchdog ejects the BPF scheduler. When the rq goes offline, re-enqueue every task on it that isn't already on the local DSQ. An enqueue on an offline rq lands on the local DSQ, so the dying CPU itself picks the tasks and balance_push() pushes them off, the same as for the other sched classes. From then on no sched_ext path on another CPU can pull a task off the rq. ops.dispatch() currently stops as soon as the CPU goes inactive, and CPU hotplug then waits for an RCU grace period before taking the rq offline. A BPF-held task affine only to the dying CPU and preempted inside an RCU read-side critical section would block that grace period, and the rq would never go offline. Test SCX_RQ_ONLINE directly so that ops.dispatch() keeps running until the rq goes offline. Only the dying CPU's own hotplug thread clears the flag during teardown, and task_can_run_on_remote_rq() still keeps other rqs' tasks off the CPU.
Title sched_ext: Fix CPU hotplug hang when a dying CPU's tasks sit in the BPF scheduler
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-10-23T12:45:03.465Z

Reserved: 2026-09-25T10:25:14.390Z

Link: CVE-2026-99085

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-10-23T13:17:32.803

Modified: 2026-10-23T13:17:32.803

Link: CVE-2026-99085

cve-icon Redhat

Severity : Moderate

Publid Date: 2026-10-23T00:00:00Z

Links: CVE-2026-99085 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-10-27T14:00:05Z

Weaknesses