net: sched: act_ctinfo: fix action creation
authorKevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
Mon, 17 Jun 2019 10:03:26 +0000 (11:03 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 17 Jun 2019 21:00:30 +0000 (14:00 -0700)
Use correct return value on action creation: ACT_P_CREATED.

The use of incorrect return value could result in a situation where the
system thought a ctinfo module was listening but actually wasn't
instantiated correctly leading to an OOPS in tcf_generic_walker().

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.  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.  Bonus, no more OOPSes.  I
managed to also miss this issue till now due to the new strict
nla_parse_nested function failing validation before action creation.

As an inexperienced developer I've learned that
copy/pasting/backporting/forward porting code correctly is hard.  If I
ever get to a developer conference I shall don the cone of shame.

Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/act_ctinfo.c

index a7d3679..2c17f68 100644 (file)
@@ -213,6 +213,7 @@ static int tcf_ctinfo_init(struct net *net, struct nlattr *nla,
                        tcf_idr_cleanup(tn, actparm->index);
                        return ret;
                }
+               ret = ACT_P_CREATED;
        } else if (err > 0) {
                if (bind) /* don't override defaults */
                        return 0;