-

CVE-2025-38468

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

net/sched: Return NULL when htb_lookup_leaf encounters an empty rbtree

htb_lookup_leaf has a BUG_ON that can trigger with the following:

tc qdisc del dev lo root
tc qdisc add dev lo root handle 1: htb default 1
tc class add dev lo parent 1: classid 1:1 htb rate 64bit
tc qdisc add dev lo parent 1:1 handle 2: netem
tc qdisc add dev lo parent 2:1 handle 3: blackhole
ping -I lo -c1 -W0.001 127.0.0.1

The root cause is the following:

1. htb_dequeue calls htb_dequeue_tree which calls the dequeue handler on
   the selected leaf qdisc
2. netem_dequeue calls enqueue on the child qdisc
3. blackhole_enqueue drops the packet and returns a value that is not
   just NET_XMIT_SUCCESS
4. Because of this, netem_dequeue calls qdisc_tree_reduce_backlog, and
   since qlen is now 0, it calls htb_qlen_notify -> htb_deactivate ->
   htb_deactiviate_prios -> htb_remove_class_from_row -> htb_safe_rb_erase
5. As this is the only class in the selected hprio rbtree,
   __rb_change_child in __rb_erase_augmented sets the rb_root pointer to
   NULL
6. Because blackhole_dequeue returns NULL, netem_dequeue returns NULL,
   which causes htb_dequeue_tree to call htb_lookup_leaf with the same
   hprio rbtree, and fail the BUG_ON

The function graph for this scenario is shown here:
 0)               |  htb_enqueue() {
 0) + 13.635 us   |    netem_enqueue();
 0)   4.719 us    |    htb_activate_prios();
 0) # 2249.199 us |  }
 0)               |  htb_dequeue() {
 0)   2.355 us    |    htb_lookup_leaf();
 0)               |    netem_dequeue() {
 0) + 11.061 us   |      blackhole_enqueue();
 0)               |      qdisc_tree_reduce_backlog() {
 0)               |        qdisc_lookup_rcu() {
 0)   1.873 us    |          qdisc_match_from_root();
 0)   6.292 us    |        }
 0)   1.894 us    |        htb_search();
 0)               |        htb_qlen_notify() {
 0)   2.655 us    |          htb_deactivate_prios();
 0)   6.933 us    |        }
 0) + 25.227 us   |      }
 0)   1.983 us    |      blackhole_dequeue();
 0) + 86.553 us   |    }
 0) # 2932.761 us |    qdisc_warn_nonwc();
 0)               |    htb_lookup_leaf() {
 0)               |      BUG_ON();
 ------------------------------------------

The full original bug report can be seen here [1].

We can fix this just by returning NULL instead of the BUG_ON,
as htb_dequeue_tree returns NULL when htb_lookup_leaf returns
NULL.

[1] https://lore.kernel.org/netdev/pF5XOOIim0IuEfhI-SOxTgRvNoDwuux7UHKnE_Y5-zVd4wmGvNk2ceHjKb8ORnzw0cGwfmVu42g9dL7XyJLf1NEzaztboTWcm0Ogxuojoeo=@willsroot.io/

Verknüpft mit AI von unstrukturierten Daten zu bestehenden CPE der NVD
This information is available to logged-in users.
Daten sind bereitgestellt durch das CVE Programm von einer CVE Numbering Authority (CNA) (Unstrukturiert).
VendorLinux
Product Linux
Default Statusunaffected
Version < fed3570e548a6c9f95c5f4c9e1a7afc1679fd90d
Version 512bb43eb5422ee69a1be05ea0d89dc074fac9a2
Status affected
Version < 5c0506cd1b1a3b145bda2612bbf7fe78d186c355
Version 512bb43eb5422ee69a1be05ea0d89dc074fac9a2
Status affected
Version < 850226aef8d28a00cf966ef26d2f8f2bff344535
Version 512bb43eb5422ee69a1be05ea0d89dc074fac9a2
Status affected
Version < 890a5d423ef0a7bd13447ceaffad21189f557301
Version 512bb43eb5422ee69a1be05ea0d89dc074fac9a2
Status affected
Version < 7ff2d83ecf2619060f30ecf9fad4f2a700fca344
Version 512bb43eb5422ee69a1be05ea0d89dc074fac9a2
Status affected
Version < e5c480dc62a3025b8428d4818e722da30ad6804f
Version 512bb43eb5422ee69a1be05ea0d89dc074fac9a2
Status affected
Version < 3691f84269a23f7edd263e9b6edbc27b7ae332f4
Version 512bb43eb5422ee69a1be05ea0d89dc074fac9a2
Status affected
Version < 0e1d5d9b5c5966e2e42e298670808590db5ed628
Version 512bb43eb5422ee69a1be05ea0d89dc074fac9a2
Status affected
VendorLinux
Product Linux
Default Statusaffected
Version 2.6.29
Status affected
Version < 2.6.29
Version 0
Status unaffected
Version <= 5.4.*
Version 5.4.297
Status unaffected
Version <= 5.10.*
Version 5.10.241
Status unaffected
Version <= 5.15.*
Version 5.15.190
Status unaffected
Version <= 6.1.*
Version 6.1.147
Status unaffected
Version <= 6.6.*
Version 6.6.100
Status unaffected
Version <= 6.12.*
Version 6.12.40
Status unaffected
Version <= 6.15.*
Version 6.15.8
Status unaffected
Version <= *
Version 6.16
Status unaffected
Zu dieser CVE wurde keine CISA KEV oder CERT.AT-Warnung gefunden.
EPSS Metriken
Type Source Score Percentile
EPSS FIRST.org 0.04% 0.103
CVSS Metriken
Source Base Score Exploit Score Impact Score Vector string