From: Budimir Markovic Date: Thu, 24 Aug 2023 08:49:05 +0000 (-0700) Subject: net/sched: sch_hfsc: Ensure inner classes have fsc curve X-Git-Tag: v6.6.7~2079^2^2~7 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b3d26c5702c7d6c45456326e56d2ccf3f103e60f;p=platform%2Fkernel%2Flinux-starfive.git net/sched: sch_hfsc: Ensure inner classes have fsc curve HFSC assumes that inner classes have an fsc curve, but it is currently possible for classes without an fsc curve to become parents. This leads to bugs including a use-after-free. Don't allow non-root classes without HFSC_FSC to become parents. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Reported-by: Budimir Markovic Signed-off-by: Budimir Markovic Acked-by: Jamal Hadi Salim Link: https://lore.kernel.org/r/20230824084905.422-1-markovicbudimir@gmail.com Signed-off-by: Jakub Kicinski --- diff --git a/net/sched/sch_hfsc.c b/net/sched/sch_hfsc.c index 70b0c58..61d5259 100644 --- a/net/sched/sch_hfsc.c +++ b/net/sched/sch_hfsc.c @@ -1012,6 +1012,10 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid, if (parent == NULL) return -ENOENT; } + if (!(parent->cl_flags & HFSC_FSC) && parent != &q->root) { + NL_SET_ERR_MSG(extack, "Invalid parent - parent class must have FSC"); + return -EINVAL; + } if (classid == 0 || TC_H_MAJ(classid ^ sch->handle) != 0) return -EINVAL;