[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20230824084905.422-1-markovicbudimir@gmail.com>
Date: Thu, 24 Aug 2023 01:49:05 -0700
From: Budimir Markovic <markovicbudimir@...il.com>
To: netdev@...r.kernel.org
Cc: jhs@...atatu.com,
Budimir Markovic <markovicbudimir@...il.com>
Subject: [PATCH net] 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 <markovicbudimir@...il.com>
Signed-off-by: Budimir Markovic <markovicbudimir@...il.com>
---
net/sched/sch_hfsc.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/net/sched/sch_hfsc.c b/net/sched/sch_hfsc.c
index 70b0c5873..d14cff8d4 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;
--
2.41.0
Powered by blists - more mailing lists