aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorCong Wang <cong.wang@bytedance.com>2025-02-03 16:58:40 -0800
committerJakub Kicinski <kuba@kernel.org>2025-02-05 18:14:46 -0800
commit638ba5089324796c2ee49af10427459c2de35f71 (patch)
tree1a044609bfa587a2a36d1010a0fe41eb0aa91d26
parentselftests/tc-testing: Add a test case for pfifo_head_drop qdisc when limit==0 (diff)
downloadwireguard-linux-638ba5089324796c2ee49af10427459c2de35f71.tar.xz
wireguard-linux-638ba5089324796c2ee49af10427459c2de35f71.zip
netem: Update sch->q.qlen before qdisc_tree_reduce_backlog()
qdisc_tree_reduce_backlog() notifies parent qdisc only if child qdisc becomes empty, therefore we need to reduce the backlog of the child qdisc before calling it. Otherwise it would miss the opportunity to call cops->qlen_notify(), in the case of DRR, it resulted in UAF since DRR uses ->qlen_notify() to maintain its active list. Fixes: f8d4bc455047 ("net/sched: netem: account for backlog updates from child qdisc") Cc: Martin Ottens <martin.ottens@fau.de> Reported-by: Mingi Cho <mincho@theori.io> Signed-off-by: Cong Wang <cong.wang@bytedance.com> Link: https://patch.msgid.link/20250204005841.223511-4-xiyou.wangcong@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-rw-r--r--net/sched/sch_netem.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c
index 71ec9986ed37..fdd79d3ccd8c 100644
--- a/net/sched/sch_netem.c
+++ b/net/sched/sch_netem.c
@@ -749,9 +749,9 @@ deliver:
if (err != NET_XMIT_SUCCESS) {
if (net_xmit_drop_count(err))
qdisc_qstats_drop(sch);
- qdisc_tree_reduce_backlog(sch, 1, pkt_len);
sch->qstats.backlog -= pkt_len;
sch->q.qlen--;
+ qdisc_tree_reduce_backlog(sch, 1, pkt_len);
}
goto tfifo_dequeue;
}