CVE-2025-38457
published 2025-07-25CVE-2025-38457: In the Linux kernel, the following vulnerability has been resolved: net/sched: Abort __tc_modify_qdisc if parent class does not exist Lion's patch [1] revealed…
medium5.5CVSS 3.1
AVLACLPRLUINSUCNINAH
In the Linux kernel, the following vulnerability has been resolved:
net/sched: Abort __tc_modify_qdisc if parent class does not exist
Lion's patch [1] revealed an ancient bug in the qdisc API.
Whenever a user creates/modifies a qdisc specifying as a parent another
qdisc, the qdisc API will, during grafting, detect that the user is
not trying to attach to a class and reject. However grafting is
performed after qdisc_create (and thus the qdiscs' init callback) is
executed. In qdiscs that eventually call qdisc_tree_reduce_backlog
during init or change (such as fq, hhf, choke, etc), an issue
arises. For example, executing the following commands:
sudo tc qdisc add dev lo root handle a: htb default 2
sudo tc qdisc add dev lo parent a: handle beef fq
Qdiscs such as fq, hhf, choke, etc unconditionally invoke
qdisc_tree_reduce_backlog() in their control path init() or change() which
then causes a failure to find the child class; however, that does not stop
the unconditional invocation of the assumed child qdisc's qlen_notify with
a null class. All these qdiscs make the assumption that class is non-null.
The solution is ensure that qdisc_leaf() which looks up the parent
class, and is invoked prior to qdisc_create(), should return failure on
not finding the class.
In this patch, we leverage qdisc_leaf to return ERR_PTRs whenever the
parentid doesn't correspond to a class, so that we can detect it
earlier on and abort before qdisc_create is called.
[1] https://lore.kernel.org/netdev/[email protected]/
Affected
40 ranges· showing 25
| Vendor | Product | Version range | Fixed in |
|---|---|---|---|
| debian | debian_linux | — | — |
| debian | linux | < linux 6.1.147-1 (bookworm) | linux 6.1.147-1 (bookworm) |
| debian | linux-6.1 | < linux 6.1.147-1 (bookworm) | linux 6.1.147-1 (bookworm) |
| linux | linux | — | — |
| linux | linux | >= 5e50da01d0ce7ef0ba3ed6cfabd62f327da0aca6 < 923a276c74e25073ae391e930792ac86a9f77f1e | 923a276c74e25073ae391e930792ac86a9f77f1e |
| linux | linux | >= 5e50da01d0ce7ef0ba3ed6cfabd62f327da0aca6 < 90436e72c9622c2f70389070088325a3232d339f | 90436e72c9622c2f70389070088325a3232d339f |
| linux | linux | >= 5e50da01d0ce7ef0ba3ed6cfabd62f327da0aca6 < 25452638f133ac19d75af3f928327d8016952c8e | 25452638f133ac19d75af3f928327d8016952c8e |
| linux | linux | >= 5e50da01d0ce7ef0ba3ed6cfabd62f327da0aca6 < 23c165dde88eac405eebb59051ea1fe139a45803 | 23c165dde88eac405eebb59051ea1fe139a45803 |
| linux | linux | >= 5e50da01d0ce7ef0ba3ed6cfabd62f327da0aca6 < 4c691d1b6b6dbd73f30ed9ee7da05f037b0c49af | 4c691d1b6b6dbd73f30ed9ee7da05f037b0c49af |
| linux | linux | >= 5e50da01d0ce7ef0ba3ed6cfabd62f327da0aca6 < 8ecd651ef24ab50123692a4e3e25db93cb11602a | 8ecd651ef24ab50123692a4e3e25db93cb11602a |
| linux | linux | >= 5e50da01d0ce7ef0ba3ed6cfabd62f327da0aca6 < e28a383d6485c3bb51dc5953552f76c4dea33eea | e28a383d6485c3bb51dc5953552f76c4dea33eea |
| linux | linux | >= 5e50da01d0ce7ef0ba3ed6cfabd62f327da0aca6 < ffdde7bf5a439aaa1955ebd581f5c64ab1533963 | ffdde7bf5a439aaa1955ebd581f5c64ab1533963 |
| linux | linux_kernel | — | — |
| linux | linux_kernel | >= 0 < 5.10.244-1 | 5.10.244-1 |
| linux | linux_kernel | >= 0 < 6.1.147-1 | 6.1.147-1 |
| linux | linux_kernel | >= 0 < 6.12.41-1 | 6.12.41-1 |
| linux | linux_kernel | >= 0 < 6.16.3-1 | 6.16.3-1 |
| linux | linux_kernel | >= 0 < 5.15.0-156.166 | 5.15.0-156.166 |
| linux | linux_kernel | >= 0 < 6.8.0-100.100 | 6.8.0-100.100 |
| linux | linux_kernel | >= 2.6.20 < 5.4.296 | 5.4.296 |
| linux | linux_kernel | >= 5.11 < 5.15.189 | 5.15.189 |
| linux | linux_kernel | >= 5.16 < 6.1.146 | 6.1.146 |
| linux | linux_kernel | >= 5.5 < 5.10.240 | 5.10.240 |
| linux | linux_kernel | >= 6.13 < 6.15.7 | 6.15.7 |
| linux | linux_kernel | >= 6.2 < 6.6.99 | 6.6.99 |
CVSS provenance
nvdv3.15.5MEDIUMCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
osv5.5MEDIUM