Message ID | 1462728392-28489-4-git-send-email-jhs@emojatatu.com |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
On Sun, May 8, 2016 at 10:26 AM, Jamal Hadi Salim <jhs@mojatatu.com> wrote: > -static int tcf_mirred_dump(struct sk_buff *skb, struct tc_action *a, int bind, int ref) > +static int tcf_mirred_dump(struct sk_buff *skb, struct tc_action *a, int bind, > + int ref) > { > unsigned char *b = skb_tail_pointer(skb); > struct tcf_mirred *m = a->priv; Nit: this is irrelevant to the bug you fix.
On 16-05-08 11:19 PM, Cong Wang wrote: > On Sun, May 8, 2016 at 10:26 AM, Jamal Hadi Salim <jhs@mojatatu.com> wrote: >> -static int tcf_mirred_dump(struct sk_buff *skb, struct tc_action *a, int bind, int ref) >> +static int tcf_mirred_dump(struct sk_buff *skb, struct tc_action *a, int bind, >> + int ref) >> { >> unsigned char *b = skb_tail_pointer(skb); >> struct tcf_mirred *m = a->priv; > > Nit: this is irrelevant to the bug you fix. > It is (80 char) indentation fix. Dont think it deserves its own patch but it was annoying enough to include. cheers, jamal
On Mon, May 9, 2016 at 4:51 AM, Jamal Hadi Salim <jhs@mojatatu.com> wrote: > On 16-05-08 11:19 PM, Cong Wang wrote: >> >> On Sun, May 8, 2016 at 10:26 AM, Jamal Hadi Salim <jhs@mojatatu.com> >> wrote: >>> >>> -static int tcf_mirred_dump(struct sk_buff *skb, struct tc_action *a, int >>> bind, int ref) >>> +static int tcf_mirred_dump(struct sk_buff *skb, struct tc_action *a, int >>> bind, >>> + int ref) >>> { >>> unsigned char *b = skb_tail_pointer(skb); >>> struct tcf_mirred *m = a->priv; >> >> >> Nit: this is irrelevant to the bug you fix. >> > > It is (80 char) indentation fix. Dont think it deserves its own patch > but it was annoying enough to include. If you target this to net-next, I would not even mention it, but you are targeting it for -stable... ;)
diff --git a/net/sched/act_mirred.c b/net/sched/act_mirred.c index dea57c1..9e682c8 100644 --- a/net/sched/act_mirred.c +++ b/net/sched/act_mirred.c @@ -61,7 +61,7 @@ static int tcf_mirred_init(struct net *net, struct nlattr *nla, struct tc_mirred *parm; struct tcf_mirred *m; struct net_device *dev; - int ret, ok_push = 0; + int ret, ok_push = 0, aexists = 0; if (nla == NULL) return -EINVAL; @@ -71,17 +71,27 @@ static int tcf_mirred_init(struct net *net, struct nlattr *nla, if (tb[TCA_MIRRED_PARMS] == NULL) return -EINVAL; parm = nla_data(tb[TCA_MIRRED_PARMS]); + + aexists = tcf_hash_check(tn, parm->index, a, bind); + if (aexists && bind) + return 0; + switch (parm->eaction) { case TCA_EGRESS_MIRROR: case TCA_EGRESS_REDIR: break; default: + if (aexists) + tcf_hash_release(a, bind); return -EINVAL; } if (parm->ifindex) { dev = __dev_get_by_index(net, parm->ifindex); - if (dev == NULL) + if (dev == NULL) { + if (aexists) + tcf_hash_release(a, bind); return -ENODEV; + } switch (dev->type) { case ARPHRD_TUNNEL: case ARPHRD_TUNNEL6: @@ -99,7 +109,7 @@ static int tcf_mirred_init(struct net *net, struct nlattr *nla, dev = NULL; } - if (!tcf_hash_check(tn, parm->index, a, bind)) { + if (!aexists) { if (dev == NULL) return -EINVAL; ret = tcf_hash_create(tn, parm->index, est, a, @@ -108,9 +118,6 @@ static int tcf_mirred_init(struct net *net, struct nlattr *nla, return ret; ret = ACT_P_CREATED; } else { - if (bind) - return 0; - tcf_hash_release(a, bind); if (!ovr) return -EEXIST; @@ -195,7 +202,8 @@ out: return retval; } -static int tcf_mirred_dump(struct sk_buff *skb, struct tc_action *a, int bind, int ref) +static int tcf_mirred_dump(struct sk_buff *skb, struct tc_action *a, int bind, + int ref) { unsigned char *b = skb_tail_pointer(skb); struct tcf_mirred *m = a->priv;