Message ID | 20180909013132.3222-4-viro@ZenIV.linux.org.uk |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
Series | cls_u32 cleanups and fixes. | expand |
On 2018-09-08 9:31 p.m., Al Viro wrote: > From: Al Viro <viro@zeniv.linux.org.uk> > > Operation makes no sense. Nothing will actually break if we do so > (depth limit in u32_classify() will prevent infinite loops), but > according to maintainers it's best prohibited outright. > > NOTE: doing so guarantees that u32_destroy() will trigger the call > of u32_destroy_hnode(); we might want to make that unconditional. > > Test: > tc qdisc add dev eth0 ingress > tc filter add dev eth0 parent ffff: protocol ip prio 100 u32 \ > link 800: offset at 0 mask 0f00 shift 6 plus 0 eat match ip protocol 6 ff > should fail with > Error: cls_u32: Not linking to root node > > Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Tested-by: Jamal Hadi Salim <jhs@mojatatu.com> Acked-by: Jamal Hadi Salim <jhs@mojatatu.com> cheers, jamal
diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c index c4782aa808c7..72459b09d910 100644 --- a/net/sched/cls_u32.c +++ b/net/sched/cls_u32.c @@ -797,6 +797,10 @@ static int u32_set_parms(struct net *net, struct tcf_proto *tp, NL_SET_ERR_MSG_MOD(extack, "Link hash table not found"); return -EINVAL; } + if (ht_down->is_root) { + NL_SET_ERR_MSG_MOD(extack, "Not linking to root node"); + return -EINVAL; + } ht_down->refcnt++; }