]> www.infradead.org Git - users/jedix/linux-maple.git/commit
net_sched: drr: Fix double list add in class with netem as child qdisc
authorVictor Nogueira <victor@mojatatu.com>
Fri, 25 Apr 2025 22:07:05 +0000 (19:07 -0300)
committerJakub Kicinski <kuba@kernel.org>
Mon, 28 Apr 2025 22:55:06 +0000 (15:55 -0700)
commitf99a3fbf023e20b626be4b0f042463d598050c9a
tree1803bfe0d4a24ebf70f151be99cfb17969172d8b
parentdfd76010f8e821b66116dec3c7d90dd2403d1396
net_sched: drr: Fix double list add in class with netem as child qdisc

As described in Gerrard's report [1], there are use cases where a netem
child qdisc will make the parent qdisc's enqueue callback reentrant.
In the case of drr, there won't be a UAF, but the code will add the same
classifier to the list twice, which will cause memory corruption.

In addition to checking for qlen being zero, this patch checks whether the
class was already added to the active_list (cl_is_active) before adding
to the list to cover for the reentrant case.

[1] https://lore.kernel.org/netdev/CAHcdcOm+03OD2j6R0=YHKqmy=VgJ8xEOKuP6c7mSgnp-TEJJbw@mail.gmail.com/

Fixes: 37d9cf1a3ce3 ("sched: Fix detection of empty queues in child qdiscs")
Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: Victor Nogueira <victor@mojatatu.com>
Link: https://patch.msgid.link/20250425220710.3964791-2-victor@mojatatu.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/sched/sch_drr.c