CVE-2026-98942: sched_ext: Build the cid tables privately and publish them with RCU

Published Oct 23, 2026
·
Updated

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

schedext: Build the cid tables privately and publish them with RCU

The cid tables are visible to the cid kfuncs while being modified: the first enable publishes the global pointers before filling them, ops.initcids() overrides rewrite them in place, and re-enables rebuild them in place. A racing TRACING or SYSCALL program can read unfilled entries, including uninitialized memory in the kmalloc'd tables, or torn topo updates.

Tie the tables' lifetimes to the root sched instead: each root enable builds a fresh set privately and publishes the per-table rcu globals once the layout is final, and root disable unpublishes and RCU-frees the set. A non-NULL global is now always a fully built table which stays valid for the reader's RCU read section, and lookups stay two loads. Kfuncs treat NULL as no-mapping, also after the scheduler exits instead of reporting the stale last mapping.

The cid kfuncs are available whether the root scheduler is cid-form or cpu-form, the latter to allow gradual migration to cids. Every root therefore builds and publishes a default mapping.

Every reader must either be gated on scheduler liveness or NULL-check inside an RCU read section. Fix the two kfuncs that were neither: scxbpfthiscid() read the table with no RCU or preemption protection and scxbpftaskcid() relied on KFRCU, which doesn't put a sleepable program in an RCU read section. The hotplug callbacks are instead serialized by retiring the tables inside the cpusreadlock() section that clears scxroot.

v2: Document why every root builds the tables (desc + cid.c comment).

Affected Software

1 affected component
Linux Linux kernel

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Compensating control

    Update the cid kfunc implementation so every reader is gated on scheduler liveness or performs a NULL check; build cid tables privately, publish fully initialized tables through the per-table __rcu globals, and retire them with RCU. Apply this to scx_bpf_task_cid() and scx_bpf_this_cid().

Event History

Oct 23, 2026
CVE Published
via MITRE·12:12 PM
Data Sourced
via MITRE·12:12 PM
Description

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203