Commit e781122d authored by Victor Nogueira's avatar Victor Nogueira Committed by Jakub Kicinski
Browse files

net/sched: Abort __tc_modify_qdisc if parent is a clsact/ingress qdisc

Wang reported an illegal configuration [1] where the user attempts to add a
child qdisc to the ingress qdisc as follows:

tc qdisc add dev eth0 handle ffff:0 ingress
tc qdisc add dev eth0 handle ffe0:0 parent ffff:a fq

To solve this, we reject any configuration attempt to add a child qdisc to
ingress or clsact.

[1] https://lore.kernel.org/netdev/20251105022213.1981982-1-wangliang74@huawei.com/



Fixes: 5e50da01 ("[NET_SCHED]: Fix endless loops (part 2): "simple" qdiscs")
Reported-by: default avatarWang Liang <wangliang74@huawei.com>
Closes: https://lore.kernel.org/netdev/20251105022213.1981982-1-wangliang74@huawei.com/


Reviewed-by: default avatarPedro Tammela <pctammela@mojatatu.ai>
Acked-by: default avatarJamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: default avatarVictor Nogueira <victor@mojatatu.com>
Reviewed-by: default avatarCong Wang <cwang@multikernel.io>
Link: https://patch.msgid.link/20251106205621.3307639-1-victor@mojatatu.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 1534ff77
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -1599,6 +1599,11 @@ static int __tc_modify_qdisc(struct sk_buff *skb, struct nlmsghdr *n,
					NL_SET_ERR_MSG(extack, "Failed to find specified qdisc");
					return -ENOENT;
				}
				if (p->flags & TCQ_F_INGRESS) {
					NL_SET_ERR_MSG(extack,
						       "Cannot add children to ingress/clsact qdisc");
					return -EOPNOTSUPP;
				}
				q = qdisc_leaf(p, clid, extack);
				if (IS_ERR(q))
					return PTR_ERR(q);