CVE-2025-38350: net/sched: Always pass notifications when child class becomes empty
In the Linux kernel, the following vulnerability has been resolved:
net/sched: Always pass notifications when child class becomes empty
Certain classful qdiscs may invoke their classes' dequeue handler on an enqueue operation. This may unexpectedly empty the child qdisc and thus make an in-flight class passive via qlennotify(). Most qdiscs do not expect such behaviour at this point in time and may re-activate the class eventually anyways which will lead to a use-after-free.
The referenced fix commit attempted to fix this behavior for the HFSC case by moving the backlog accounting around, though this turned out to be incomplete since the parent's parent may run into the issue too. The following reproducer demonstrates this use-after-free:
tc qdisc add dev lo root handle 1: drr tc filter add dev lo parent 1: basic classid 1:1 tc class add dev lo parent 1: classid 1:1 drr tc qdisc add dev lo parent 1:1 handle 2: hfsc def 1 tc class add dev lo parent 2: classid 2:1 hfsc rt m1 8 d 1 m2 0 tc qdisc add dev lo parent 2:1 handle 3: netem tc qdisc add dev lo parent 3:1 handle 4: blackhole
echo 1 | socat -u STDIN UDP4-DATAGRAM:127.0.0.1:8888 tc class delete dev lo classid 1:1 echo 1 | socat -u STDIN UDP4-DATAGRAM:127.0.0.1:8888
Since backlog accounting issues leading to a use-after-frees on stale class pointers is a recurring pattern at this point, this patch takes a different approach. Instead of trying to fix the accounting, the patch ensures that qdisctreereducebacklog always calls qlennotify when the child qdisc is empty. This solves the problem because deletion of qdiscs always involves a call to qdiscreset() and / or qdiscpurgequeue() which ultimately resets its qlen to 0 thus causing the following qdisctreereducebacklog() to report to the parent. Note that this may call qlennotify on passive classes multiple times. This is not a problem after the recent patch series that made all the classful qdiscs qlennotify() handlers idempotent.
Affected Software
Remediation
Event History
Frequently Asked Questions
What is the severity of CVE-2025-38350?
CVE-2025-38350 has a severity rating that indicates it may lead to unexpected behaviors in classful queuing disciplines.
How do I fix CVE-2025-38350?
To fix CVE-2025-38350, update the Linux kernel to the latest stable version that addresses this vulnerability.
What impact does CVE-2025-38350 have on the Linux kernel?
CVE-2025-38350 may cause issues with classful qdiscs potentially leading to performance problems in network traffic scheduling.
Is CVE-2025-38350 exploitable remotely?
The exploitability of CVE-2025-38350 typically depends on the specific configuration and deployment of the Linux kernel.
Which versions of the Linux kernel are affected by CVE-2025-38350?
CVE-2025-38350 affects specific versions of the Linux kernel that utilize classful queuing disciplines.