diff options
| author | Xiang Mei <xmei5@asu.edu> | 2025-11-27 17:14:14 -0700 |
|---|---|---|
| committer | Paolo Abeni <pabeni@redhat.com> | 2025-12-02 13:28:00 +0100 |
| commit | 9fefc78f7f02d71810776fdeb119a05a946a27cc (patch) | |
| tree | 987739d3a1dc01b37ea821f49b23a73a7858dff3 /drivers/pnp | |
| parent | e5235eb6cfe02a51256013a78f7b28779a7740d5 (diff) | |
| download | net-9fefc78f7f02d71810776fdeb119a05a946a27cc.tar.gz | |
net/sched: sch_cake: Fix incorrect qlen reduction in cake_drop
In cake_drop(), qdisc_tree_reduce_backlog() is used to update the qlen
and backlog of the qdisc hierarchy. Its caller, cake_enqueue(), assumes
that the parent qdisc will enqueue the current packet. However, this
assumption breaks when cake_enqueue() returns NET_XMIT_CN: the parent
qdisc stops enqueuing current packet, leaving the tree qlen/backlog
accounting inconsistent. This mismatch can lead to a NULL dereference
(e.g., when the parent Qdisc is qfq_qdisc).
This patch computes the qlen/backlog delta in a more robust way by
observing the difference before and after the series of cake_drop()
calls, and then compensates the qdisc tree accounting if cake_enqueue()
returns NET_XMIT_CN.
To ensure correct compensation when ACK thinning is enabled, a new
variable is introduced to keep qlen unchanged.
Fixes: 15de71d06a40 ("net/sched: Make cake_enqueue return NET_XMIT_CN when past buffer_limit")
Signed-off-by: Xiang Mei <xmei5@asu.edu>
Reviewed-by: Toke Høiland-Jørgensen <toke@toke.dk>
Link: https://patch.msgid.link/20251128001415.377823-1-xmei5@asu.edu
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Diffstat (limited to 'drivers/pnp')
0 files changed, 0 insertions, 0 deletions
