Commit 43321251 authored by David S. Miller's avatar David S. Miller

Merge branch 'net-sched-act_ctinfo-fixes'

Kevin Darbyshire-Bryant says:

====================
net: sched: act_ctinfo: fixes

This is first attempt at sending a small series.  Order is important
because one bug (policy validation) prevents us from encountering the
more important 'OOPS' generating bug in action creation.  Fix the OOPS
first.

Confession time: Until very recently, development of this module has
been done on 'net-next' tree to 'clean compile' level with run-time
testing on backports to 4.14 & 4.19 kernels under openwrt.  It turns out
that sched: action: based code has been under more active change than I
realised.

During the back & forward porting during development & testing, the
critical ACT_P_CREATED return code got missed despite being in the 4.14
& 4.19 backports.  I have now gone through the init functions, using
act_csum as reference with a fine toothed comb and am happy they do the
same things.

This issue hadn't been caught till now due to another issue caused by
new strict nla_parse_nested function failing parsing validation before
action creation.

Thanks to Marcelo Leitner <marcelo.leitner@gmail.com> for flagging
extack deficiency (fixed in 733f0766 sched: act_ctinfo: use extack
error reporting) which led to b424e432 ("netlink: add validation of
NLA_F_NESTED flag") and 8cb08174 ("netlink: make validation more
configurable for future strictness”) which led to the policy validation
fix, which then led to the action creation fix both contained in this
series.

If I ever get to a developer conference please feel free to
tar/feather/apply cone of shame.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 098eadce c197d636
...@@ -141,7 +141,8 @@ static int tcf_ctinfo_act(struct sk_buff *skb, const struct tc_action *a, ...@@ -141,7 +141,8 @@ static int tcf_ctinfo_act(struct sk_buff *skb, const struct tc_action *a,
} }
static const struct nla_policy ctinfo_policy[TCA_CTINFO_MAX + 1] = { static const struct nla_policy ctinfo_policy[TCA_CTINFO_MAX + 1] = {
[TCA_CTINFO_ACT] = { .len = sizeof(struct [TCA_CTINFO_ACT] = { .type = NLA_EXACT_LEN,
.len = sizeof(struct
tc_ctinfo) }, tc_ctinfo) },
[TCA_CTINFO_ZONE] = { .type = NLA_U16 }, [TCA_CTINFO_ZONE] = { .type = NLA_U16 },
[TCA_CTINFO_PARMS_DSCP_MASK] = { .type = NLA_U32 }, [TCA_CTINFO_PARMS_DSCP_MASK] = { .type = NLA_U32 },
...@@ -213,6 +214,7 @@ static int tcf_ctinfo_init(struct net *net, struct nlattr *nla, ...@@ -213,6 +214,7 @@ static int tcf_ctinfo_init(struct net *net, struct nlattr *nla,
tcf_idr_cleanup(tn, actparm->index); tcf_idr_cleanup(tn, actparm->index);
return ret; return ret;
} }
ret = ACT_P_CREATED;
} else if (err > 0) { } else if (err > 0) {
if (bind) /* don't override defaults */ if (bind) /* don't override defaults */
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment