Commit b3d26c57 authored by Budimir Markovic's avatar Budimir Markovic Committed by Jakub Kicinski
Browse files

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: 1da177e4 ("Linux-2.6.12-rc2")
Reported-by: default avatarBudimir Markovic <markovicbudimir@gmail.com>
Signed-off-by: default avatarBudimir Markovic <markovicbudimir@gmail.com>
Acked-by: default avatarJamal Hadi Salim <jhs@mojatatu.com>
Link: https://lore.kernel.org/r/20230824084905.422-1-markovicbudimir@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent c4413a20
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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;