CVE-2026-22999 Overview
A Use-After-Free (UAF) vulnerability has been identified in the Linux kernel's network scheduler component, specifically within the Quick Fair Queueing (QFQ) discipline implementation. The flaw exists in the qfq_change_class() function, which improperly frees an existing class and its associated qdisc data structure during error handling scenarios.
When qfq_change_class() encounters an error condition, it incorrectly frees cl->qdisc and cl even when a new class and qdisc were not allocated. This premature deallocation can lead to Use-After-Free conditions, potentially allowing attackers to corrupt memory, crash the system, or achieve code execution through careful memory manipulation.
Critical Impact
This vulnerability in the Linux kernel's QFQ scheduler can lead to Use-After-Free conditions, risking system stability and potential privilege escalation for local attackers with network scheduler configuration capabilities.
Affected Products
- Linux kernel with QFQ (Quick Fair Queueing) scheduler enabled
- Systems utilizing net/sched/sch_qfq.c network scheduling
- Linux distributions running vulnerable kernel versions
Discovery Timeline
- 2026-01-25 - CVE CVE-2026-22999 published to NVD
- 2026-01-26 - Last updated in NVD database
Technical Details for CVE-2026-22999
Vulnerability Analysis
The vulnerability resides in the qfq_change_class() function within the Linux kernel's QFQ scheduler implementation (net/sched/sch_qfq.c). The QFQ scheduler is a packet scheduling algorithm that provides fair queuing for network traffic.
The core issue stems from improper resource management during error handling. When modifying an existing class configuration fails, the function erroneously frees memory that is still in use by the system. Specifically, the cl->qdisc (queuing discipline) and cl (class) structures should only be freed if new allocations were made during the operation. The flawed logic frees these structures regardless, creating a dangling pointer scenario.
This Use-After-Free vulnerability can be triggered when an administrator or privileged user attempts to modify QFQ class parameters and the operation fails partway through. The freed memory may be reallocated for other purposes while the scheduler still maintains references to it, leading to memory corruption when subsequent scheduler operations access the stale pointers.
Root Cause
The root cause is a logic error in the error handling path of qfq_change_class(). The function fails to track whether new allocations were made before attempting cleanup, leading to the premature deallocation of existing, in-use data structures. The fix ensures that cl->qdisc and cl are only freed when a new class and qdisc were actually allocated during the function's execution, preventing the Use-After-Free condition.
Attack Vector
Exploitation of this vulnerability requires local access to the system with sufficient privileges to configure network traffic control (typically root or CAP_NET_ADMIN capability). An attacker would need to:
- Configure or have access to QFQ scheduler on a network interface
- Trigger the error condition in qfq_change_class() through malformed or conflicting configuration parameters
- Perform subsequent memory operations to reclaim the freed memory with attacker-controlled data
- Trigger the scheduler to access the corrupted memory, potentially achieving code execution or privilege escalation
The vulnerability is exploitable through the tc (traffic control) utility or equivalent netlink socket interactions. While the attack requires local privileges, it could be used for privilege escalation in containerized environments or by compromised processes with limited network administration capabilities.
Detection Methods for CVE-2026-22999
Indicators of Compromise
- Unexpected kernel panics or oops messages referencing qfq_change_class, sch_qfq, or QFQ scheduler functions
- System instability following traffic control configuration changes
- Kernel log entries indicating memory corruption or invalid memory access in network scheduler subsystems
- Unusual process crashes when interacting with QFQ scheduler configurations
Detection Strategies
- Monitor kernel logs (dmesg, /var/log/kern.log) for UAF-related warnings, KASAN reports, or scheduler-related crashes
- Implement kernel address sanitizer (KASAN) in development/testing environments to detect memory corruption early
- Deploy audit rules to track tc command executions and netlink socket operations related to traffic control
- Use SentinelOne Singularity Platform to detect anomalous kernel behavior and memory corruption attempts
Monitoring Recommendations
- Enable kernel auditing for network namespace and traffic control operations
- Configure alerting for unexpected scheduler-related kernel messages
- Monitor for processes repeatedly attempting to modify QFQ scheduler configurations
- Implement system integrity monitoring to detect unauthorized kernel module changes
How to Mitigate CVE-2026-22999
Immediate Actions Required
- Update to a patched Linux kernel version containing the fix for this vulnerability
- If immediate patching is not possible, consider disabling or removing the QFQ scheduler module (sch_qfq)
- Restrict access to traffic control utilities and CAP_NET_ADMIN capability to trusted administrators only
- Audit current QFQ scheduler configurations and monitor for suspicious modification attempts
Patch Information
The vulnerability has been addressed in the Linux kernel through multiple stable branch commits. The fix ensures proper tracking of allocation state before freeing resources in the error path.
Patches are available through the following kernel git commits:
System administrators should apply kernel updates from their Linux distribution's security channels as soon as patches become available.
Workarounds
- Remove or blacklist the sch_qfq kernel module if QFQ scheduling is not required: modprobe -r sch_qfq
- Restrict CAP_NET_ADMIN capability to minimize the attack surface
- Use alternative scheduling disciplines such as fq_codel, htb, or pfifo_fast if fair queuing is needed
- Implement network namespaces with restricted permissions to isolate traffic control configurations
# Configuration example
# Disable QFQ scheduler module loading
echo "blacklist sch_qfq" >> /etc/modprobe.d/blacklist-qfq.conf
# Remove currently loaded module (if not in use)
modprobe -r sch_qfq
# Verify module is not loaded
lsmod | grep qfq
# Restrict traffic control access (example using capabilities)
setcap -r /sbin/tc
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

