net/sched: sch_teql: fix use-after-free on lower qdisc drop
Summary
| CVE | CVE-2026-99282 |
| State | PUBLISHED |
| Assigner | Linux |
| Source Priority | CVE Program / NVD first with legacy fallback |
| Published | 2026-11-07 14:17:03 UTC |
| Updated | 2026-11-07 14:17:03 UTC |
| Description | 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. |
Vendor Declared Affected Products
| Source | Vendor | Product | Version | Platforms |
|---|
| CNA |
Linux |
Linux |
affected 572a9d7b6fc7f20f573664063324c086be310c42 fc55d92ae6a4b2e7d062cad6d4c67f6b061d9cde git |
Not specified |
| CNA |
Linux |
Linux |
affected 572a9d7b6fc7f20f573664063324c086be310c42 2702ae318630787c640ec0d0403ffd9d95c43e9e git |
Not specified |
| CNA |
Linux |
Linux |
affected 572a9d7b6fc7f20f573664063324c086be310c42 782d6bb8f9b8e9d8591181662222bf74cd3ecf79 git |
Not specified |
| CNA |
Linux |
Linux |
affected 2.6.33 |
Not specified |
| CNA |
Linux |
Linux |
unaffected 2.6.33 semver |
Not specified |
| CNA |
Linux |
Linux |
unaffected 6.18.61 6.18.* semver |
Not specified |
| CNA |
Linux |
Linux |
unaffected 7.3.2 7.3.* semver |
Not specified |
| CNA |
Linux |
Linux |
unaffected 7.4-rc1 * original_commit_for_fix |
Not specified |
References
| Reference | Source | Link | Tags |
|---|
| git.kernel.org/stable/c/782d6bb8f9b8e9d8591181662222bf74cd3ecf79 |
416baaa9-dc9f-4396-8d5f-8c081fb06d67 |
git.kernel.org |
|
| git.kernel.org/stable/c/2702ae318630787c640ec0d0403ffd9d95c43e9e |
416baaa9-dc9f-4396-8d5f-8c081fb06d67 |
git.kernel.org |
|
| git.kernel.org/stable/c/fc55d92ae6a4b2e7d062cad6d4c67f6b061d9cde |
416baaa9-dc9f-4396-8d5f-8c081fb06d67 |
git.kernel.org |
|
| CVE Program record |
CVE.ORG |
www.cve.org |
canonical |
| NVD vulnerability detail |
NVD |
nvd.nist.gov |
canonical, analysis |
No vendor comments have been submitted for this CVE.
There are currently no legacy QID mappings associated with this CVE.