net/sched: Prohibit regrafting ingress or clsact Qdiscs
[ Upstream commit9de95df5d1
] Currently, after creating an ingress (or clsact) Qdisc and grafting it under TC_H_INGRESS (TC_H_CLSACT), it is possible to graft it again under e.g. a TBF Qdisc: $ ip link add ifb0 type ifb $ tc qdisc add dev ifb0 handle 1: root tbf rate 20kbit buffer 1600 limit 3000 $ tc qdisc add dev ifb0 clsact $ tc qdisc link dev ifb0 handle ffff: parent 1:1 $ tc qdisc show dev ifb0 qdisc tbf 1: root refcnt 2 rate 20Kbit burst 1600b lat 560.0ms qdisc clsact ffff: parent ffff:fff1 refcnt 2 ^^^^^^^^ clsact's refcount has increased: it is now grafted under both TC_H_CLSACT and 1:1. ingress and clsact Qdiscs should only be used under TC_H_INGRESS (TC_H_CLSACT). Prohibit regrafting them. Fixes:1da177e4c3
("Linux-2.6.12-rc2") Fixes:1f211a1b92
("net, sched: add clsact qdisc") Tested-by: Pedro Tammela <pctammela@mojatatu.com> Acked-by: Jamal Hadi Salim <jhs@mojatatu.com> Reviewed-by: Jamal Hadi Salim <jhs@mojatatu.com> Reviewed-by: Vlad Buslov <vladbu@nvidia.com> Signed-off-by: Peilin Ye <peilin.ye@bytedance.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Родитель
cde00dcdf0
Коммит
b1cb1ba1fb
|
@ -1589,6 +1589,11 @@ replay:
|
|||
NL_SET_ERR_MSG(extack, "Invalid qdisc name");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (q->flags & TCQ_F_INGRESS) {
|
||||
NL_SET_ERR_MSG(extack,
|
||||
"Cannot regraft ingress or clsact Qdiscs");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (q == p ||
|
||||
(p && check_loop(q, p, 0))) {
|
||||
NL_SET_ERR_MSG(extack, "Qdisc parent/child loop detected");
|
||||
|
|
Загрузка…
Ссылка в новой задаче