[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <878qfl9op9.fsf@toke.dk>
Date: Tue, 02 Dec 2025 11:13:06 +0100
From: Toke Høiland-Jørgensen <toke@...e.dk>
To: Jakub Kicinski <kuba@...nel.org>
Cc: Xiang Mei <xmei5@....edu>, security@...nel.org, netdev@...r.kernel.org,
xiyou.wangcong@...il.com, cake@...ts.bufferbloat.net, bestswngs@...il.com
Subject: Re: [PATCH net v8 1/2] net/sched: sch_cake: Fix incorrect qlen
reduction in cake_drop
Jakub Kicinski <kuba@...nel.org> writes:
> On Fri, 28 Nov 2025 10:15:53 +0100 Toke Høiland-Jørgensen wrote:
>> Xiang Mei <xmei5@....edu> writes:
>>
>> > 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@....edu>
>>
>> Please retain tags when reposting...
>>
>> Reviewed-by: Toke Høiland-Jørgensen <toke@...e.dk>
>
> AI code review asks:
>
> When ACK thinning occurs, the incoming packet contributes len -
> ack_pkt_len bytes to sch->qstats.backlog, but this compensation uses
> the full len value. Should this be prev_backlog - (len - ack_pkt_len)
> to match what was actually added to the backlog?
No, there's a separate qdisc_tree_reduce_backlog(sch, 1, ack_pkt_len)
as part of the ACK thinning that compensates for the difference.
-Toke
Powered by blists - more mailing lists