CVE-2026-93099 in Linuxinfo

Summary

by MITRE • 09/18/2026

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

fs/resctrl: Fix UAF from worker threads when domains are removed

The mbm_handle_overflow() and cqm_handle_limbo() workers read event counters and may sleep while doing so. They are scheduled via delayed_work embedded in struct rdt_l3_mon_domain. Architecture allocates and frees these domains from CPU hotplug callbacks under cpus_write_lock(), and the workers acquire cpus_read_lock() to keep the domain alive across their access.

A use-after-free can occur when a worker is blocked waiting for cpus_read_lock() while the hotplug core holds cpus_write_lock(): the architecture frees the rdt_l3_mon_domain that contains the worker's work_struct. When the worker unblocks, the container_of() it performs on the embedded work pointer dereferences freed memory.

Drop cpus_read_lock() from the workers and instead drain pending and in-flight work synchronously before the architecture can free the domain. Since architecture offlines the domain under cpus_write_lock() after it has been unlinked from the RCU list and a grace period has elapsed, no new work can be scheduled. The cancel only needs to wait out existing work. Drop rdtgroup_mutex during CPU offline around cancel_delayed_work_sync() so that a worker waiting on the mutex can complete before re-pinning the work on a different CPU.

When offlining a CPU the architecture may iterate over resources in any order. For example, the MBA control domain may be offlined before or after a corresponding L3 monitor domain. Ensure that resctrl fs cancels the workers no matter what order the architecture offlines the domains.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

Analysis

by VulDB Data Team • 09/18/2026

The Linux kernel subsystem responsible for Resource Director Technology (RDT), specifically within the filesystem interface located at fs/resctrl, contained a critical use-after-free vulnerability affecting CPU hotplug operations. This flaw originated in the interaction between worker threads managing monitoring events and the architecture-level domain management logic during CPU offlining processes. The core issue involved the mbm_handle_overflow() and cqm_handle_limbo() functions, which are scheduled as delayed work items embedded within struct rdt_l3_mon_domain structures. These workers were designed to read event counters and potentially sleep while waiting for locks or I/O completion. To prevent premature freeing of these domain structures during their execution, the original implementation relied on acquiring cpus_read_lock(). This lock was intended to keep the CPU online and the associated data structures valid throughout the worker's lifecycle.

The vulnerability manifested due to a race condition between the hotplug core and these worker threads. When a CPU is being offlined, the architecture holds cpus_write_lock() while iterating over resources to free domains. If a worker thread was blocked waiting for cpus_read_lock(), it could not proceed because the write lock held by the hotplug core prevented read locks from being acquired. Consequently, the hotplug code would successfully free the rdt_l3_mon_domain structure containing the pending work item. Once the CPU state changed and the worker eventually unblocked or was rescheduled, it would attempt to access its embedded work_struct via container_of(). Since the parent domain had already been freed by the architecture, this dereference resulted in a use-after-free condition, leading to potential kernel crashes, data corruption, or arbitrary code execution depending on memory layout.

This vulnerability is classified under CWE-416: Use After Free, as it involves accessing memory after it has been returned to the system for reuse without proper synchronization guarantees. From an offensive security perspective, this aligns with ATT&CK techniques related to privilege escalation and defense evasion through kernel exploitation. The flaw highlights a common pitfall in Linux kernel development where reference counting or locking mechanisms are not strictly synchronized with asynchronous work queue lifecycles during state transitions like CPU hotplug events.

The resolution involved fundamentally changing how the resctrl subsystem handles domain removal by eliminating reliance on cpus_read_lock() for memory safety and instead enforcing synchronous draining of pending operations. The fix ensures that before any rdt_l3_mon_domain is freed, all associated delayed work items are cancelled synchronously using cancel_delayed_work_sync(). This function waits for any in-flight worker to complete its execution before returning, thereby guaranteeing that no worker will access the domain structure after it has been unlinked and freed. Additionally, the patch addresses a potential deadlock scenario by dropping rdtgroup_mutex during CPU offline operations around the cancellation call. This allows workers waiting on the mutex to finish their tasks without being blocked indefinitely by the hotplug process re-pinning work to different CPUs.

Furthermore, the fix accounts for non-deterministic ordering in resource offlining. Since the architecture may iterate over resources such as MBA control domains and L3 monitor domains in any order during CPU offline sequences, the resctrl filesystem must ensure workers are cancelled regardless of this sequence. By decoupling memory safety from read locks and relying on explicit synchronous cancellation before deallocation, the kernel ensures that no dangling pointers remain accessible to worker threads. This approach aligns with best practices for handling asynchronous work in concurrent environments, emphasizing deterministic cleanup over speculative locking strategies.

Mitigation strategies for organizations running affected Linux kernels include applying vendor-provided security patches immediately upon availability. For systems where patching is not immediately feasible, administrators should monitor CPU hotplug events and consider restricting dynamic CPU configuration changes if the workload allows it to reduce exposure windows. Regular auditing of kernel logs for oops or panic messages related to resctrl can help detect exploitation attempts or crashes resulting from this flaw. Maintaining up-to-date system configurations and leveraging automated vulnerability management tools are essential steps in reducing the risk associated with such low-level kernel defects.

Responsible

Linux

Reservation

09/17/2026

Disclosure

09/18/2026

Moderation

accepted

CPE

ready

EPSS

0.00000

KEV

no

Activities

very low

Sources

Want to know what is going to be exploited?

We predict KEV entries!