net/sched: sch_hfsc: Ensure inner classes have fsc curve
[ Upstream commitb3d26c5702
] 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:1da177e4c3
("Linux-2.6.12-rc2") Reported-by: Budimir Markovic <markovicbudimir@gmail.com> Signed-off-by: Budimir Markovic <markovicbudimir@gmail.com> Acked-by: Jamal Hadi Salim <jhs@mojatatu.com> Link: https://lore.kernel.org/r/20230824084905.422-1-markovicbudimir@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
85da5ec068
commit
a1e820fc78
|
@ -1012,6 +1012,10 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
|
||||||
if (parent == NULL)
|
if (parent == NULL)
|
||||||
return -ENOENT;
|
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)
|
if (classid == 0 || TC_H_MAJ(classid ^ sch->handle) != 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
Loading…
Reference in New Issue