CVE-2025-38350
Severity CVSS v4.0:
Pending analysis
Type:
CWE-416
Use After Free
Publication date:
19/07/2025
Last modified:
16/12/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
net/sched: Always pass notifications when child class becomes empty<br />
<br />
Certain classful qdiscs may invoke their classes&#39; dequeue handler on an<br />
enqueue operation. This may unexpectedly empty the child qdisc and thus<br />
make an in-flight class passive via qlen_notify(). Most qdiscs do not<br />
expect such behaviour at this point in time and may re-activate the<br />
class eventually anyways which will lead to a use-after-free.<br />
<br />
The referenced fix commit attempted to fix this behavior for the HFSC<br />
case by moving the backlog accounting around, though this turned out to<br />
be incomplete since the parent&#39;s parent may run into the issue too.<br />
The following reproducer demonstrates this use-after-free:<br />
<br />
tc qdisc add dev lo root handle 1: drr<br />
tc filter add dev lo parent 1: basic classid 1:1<br />
tc class add dev lo parent 1: classid 1:1 drr<br />
tc qdisc add dev lo parent 1:1 handle 2: hfsc def 1<br />
tc class add dev lo parent 2: classid 2:1 hfsc rt m1 8 d 1 m2 0<br />
tc qdisc add dev lo parent 2:1 handle 3: netem<br />
tc qdisc add dev lo parent 3:1 handle 4: blackhole<br />
<br />
echo 1 | socat -u STDIN UDP4-DATAGRAM:127.0.0.1:8888<br />
tc class delete dev lo classid 1:1<br />
echo 1 | socat -u STDIN UDP4-DATAGRAM:127.0.0.1:8888<br />
<br />
Since backlog accounting issues leading to a use-after-frees on stale<br />
class pointers is a recurring pattern at this point, this patch takes<br />
a different approach. Instead of trying to fix the accounting, the patch<br />
ensures that qdisc_tree_reduce_backlog always calls qlen_notify when<br />
the child qdisc is empty. This solves the problem because deletion of<br />
qdiscs always involves a call to qdisc_reset() and / or<br />
qdisc_purge_queue() which ultimately resets its qlen to 0 thus causing<br />
the following qdisc_tree_reduce_backlog() to report to the parent. Note<br />
that this may call qlen_notify on passive classes multiple times. This<br />
is not a problem after the recent patch series that made all the<br />
classful qdiscs qlen_notify() handlers idempotent.
Impact
Base Score 3.x
7.80
Severity 3.x
HIGH
Vulnerable products and versions
| CPE | From | Up to |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.4.294 (including) | 5.4.296 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.10.238 (including) | 5.10.240 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.15.185 (including) | 5.15.187 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.1.141 (including) | 6.1.144 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.6.93 (including) | 6.6.97 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.12.31 (including) | 6.12.37 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.14.9 (including) | 6.15 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.15.1 (including) | 6.15.6 (excluding) |
| cpe:2.3:o:linux:linux_kernel:6.15:-:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:6.16:rc1:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:6.16:rc2:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:6.16:rc3:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:6.16:rc4:*:*:*:*:*:* | ||
| cpe:2.3:o:debian:debian_linux:11.0:*:*:*:*:*:*:* |
To consult the complete list of CPE names with products and versions, see this page
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/103406b38c600fec1fe375a77b27d87e314aea09
- https://git.kernel.org/stable/c/3b290923ad2b23596208c1e29520badef4356a43
- https://git.kernel.org/stable/c/7874c9c132e906a52a187d045995b115973c93fb
- https://git.kernel.org/stable/c/a44acdd9e84a211989ff4b9b92bf3545d8456ad5
- https://git.kernel.org/stable/c/a553afd91f55ff39b1e8a1c4989a29394c9e0472
- https://git.kernel.org/stable/c/e269f29e9395527bc00c213c6b15da04ebb35070
- https://git.kernel.org/stable/c/e9921b57dca05ac5f4fa1fa8e993d4f0ee52e2b7
- https://git.kernel.org/stable/c/f680a4643c6f71e758d8fe0431a958e9a6a4f59d
- https://lists.debian.org/debian-lts-announce/2025/10/msg00007.html
- https://lists.debian.org/debian-lts-announce/2025/10/msg00008.html



