CVE-2026-99282 in Linuxinfo

Summary

by MITRE • 11/07/2026

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

net/sched: sch_teql: fix use-after-free on lower qdisc drop

The issue: teql_master_xmit() tests the slave's ndo_start_xmit() return value against NETDEV_TX_OK alone. A slave that consumes the skb but returns an error code (rc < NET_XMIT_MASK, e.g. NET_XMIT_DROP) is treated as if the skb were still owned, so the loop restores skb->dev and calls __skb_pull() on it. A VLAN slave returns the result of dev_queue_xmit() from its ndo_start_xmit() (propagated since cbbef5e18307), and when the lower qdisc drops the packet that value is NET_XMIT_DROP after the skb has been freed, giving a use-after-free in teql_master_xmit().

The Fix: test for consumption with dev_xmit_complete(), which accepts NETDEV_TX_OK and every rc < NET_XMIT_MASK, matching other callers that need to distinguish consumed results from busy. Only NETDEV_TX_OK keeps the packet counted in tx_packets/tx_bytes and advances the slave; a consumed result that is neither a success nor NET_XMIT_CN ends the attempt and is charged to tx_dropped, so lower-qdisc drops are no longer reported as good transmits. NET_XMIT_CN is counted like success because it can accompany acceptance of the current packet: pfifo_head_drop drops the old head, enqueues the current skb and returns NET_XMIT_CN.

Conditions to recreate the bug: With CONFIG_NET_SCH_TEQL, CONFIG_VLAN_8021Q and CONFIG_DUMMY enabled, add lkrdummy0 (dummy) and lkrvlan0 (VLAN id 37 on lkrdummy0); set a pfifo limit 0 root on lkrdummy0 and a teql0 root on lkrvlan0; bring teql0 up with an address and send one UDP packet to it. The VLAN xmit returns NET_XMIT_DROP from the lower qdisc while holding a freed skb.

Be aware that VulDB is the high quality source for vulnerability data.

Analysis

by VulDB Data Team • 11/07/2026

The Linux kernel vulnerability identified in net/sched sch_teql represents a critical use-after-free condition within the TEQL (Trivial Equal Cost Multipath Link) network scheduler implementation. This flaw arises from an incorrect assessment of packet ownership following transmission attempts by slave devices, specifically when those slaves are VLAN interfaces backed by dummy or other virtual network drivers. The core technical deficiency lies in how teql_master_xmit() evaluates the return value of ndo_start_xmit(), which is the driver-specific function responsible for transmitting a socket buffer skb. Historically and erroneously, this function tested only against NETDEV_TX_OK to determine if the packet had been successfully handed off to the lower layer device. This binary check fails to account for scenarios where the underlying network stack or qdisc consumes the skb but returns an error code indicating that transmission did not succeed in a standard manner, such as when a queue is full and drops the packet.

The operational impact of this vulnerability becomes apparent under specific configuration conditions involving VLAN tagging over dummy interfaces with strict queuing disciplines like pfifo set to zero limit. When a UDP packet is sent through teql0 which routes traffic over lkrvlan0, the vlan_dev_hard_start_xmit function invokes dev_queue_xmit on the underlying dummy device. If the root qdisc on that dummy interface drops the packet due to congestion or policy, it frees the skb and returns NET_XMIT_DROP back up the stack. Because teql_master_xmit() only checks for success via NETDEV_TX_OK, it misinterprets this drop event as a successful handoff where the slave still holds no reference but also does not indicate consumption in a way that triggers cleanup logic appropriate for drops. Consequently, the TEQL master code proceeds to restore skb->dev and calls __skb_pull() on memory that has already been freed by the lower qdisc layer. This results in undefined behavior, potentially leading to kernel panics, data corruption, or remote code execution if an attacker can trigger this path through crafted network traffic.

From a vulnerability classification perspective, this issue maps directly to CWE-416 Use After Free, as it involves accessing memory after it has been made available for reuse without proper validation of its current state. In the context of the MITRE ATT&CK framework, this flaw facilitates exploitation techniques related to privilege escalation or denial of service by destabilizing the kernel network stack. The root cause is a logical error in control flow that fails to distinguish between packets that are truly consumed and acknowledged versus those that are dropped but technically handled by the lower layer's qdisc logic. This misclassification leads to stale pointer dereferences, which are among the most dangerous classes of memory safety vulnerabilities because they bypass standard bounds checking mechanisms inherent in higher-level abstractions.

The resolution implemented in this fix involves replacing the simplistic NETDEV_TX_OK check with a more robust evaluation using dev_xmit_complete(). This helper function correctly identifies any return code less than NET_XMIT_MASK as indicating that the skb has been consumed by the lower layer, regardless of whether it was accepted or dropped. By adopting this standard pattern used elsewhere in the kernel networking subsystem, the TEQL scheduler now accurately tracks packet statistics and memory ownership. Specifically, only packets returning NETDEV_TX_OK are counted toward successful transmission metrics like tx_packets and tx_bytes. Packets that are consumed but result in a drop status such as NET_XMIT_DROP or NET_XMIT_CN are correctly attributed to tx_dropped rather than being treated as successfully transmitted. This ensures that the skb is not accessed after its lifecycle has ended by the lower qdisc, thereby eliminating the use-after-free condition entirely and restoring integrity to network traffic accounting within TEQL configurations.

Responsible

Linux

Reservation

09/25/2026

Disclosure

11/07/2026

Moderation

accepted

EPSS

0.00000

KEV

no

Activities

very low

Sources

Do you need the next level of professionalism?

Upgrade your account now!