Commit a1ddcfee authored by John Fastabend's avatar John Fastabend Committed by David S. Miller

net: cls_u32: fix missed pcpu_success free_percpu

This fixes a missed free_percpu in the unwind code path and when
keys are destroyed.
Signed-off-by: default avatarJohn Fastabend <john.r.fastabend@intel.com>
Acked-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 37ab7ddf
...@@ -362,6 +362,9 @@ static int u32_destroy_key(struct tcf_proto *tp, struct tc_u_knode *n) ...@@ -362,6 +362,9 @@ static int u32_destroy_key(struct tcf_proto *tp, struct tc_u_knode *n)
n->ht_down->refcnt--; n->ht_down->refcnt--;
#ifdef CONFIG_CLS_U32_PERF #ifdef CONFIG_CLS_U32_PERF
free_percpu(n->pf); free_percpu(n->pf);
#endif
#ifdef CONFIG_CLS_U32_MARK
free_percpu(n->pcpu_success);
#endif #endif
kfree(n); kfree(n);
return 0; return 0;
...@@ -693,6 +696,10 @@ static int u32_change(struct net *net, struct sk_buff *in_skb, ...@@ -693,6 +696,10 @@ static int u32_change(struct net *net, struct sk_buff *in_skb,
#ifdef CONFIG_CLS_U32_MARK #ifdef CONFIG_CLS_U32_MARK
n->pcpu_success = alloc_percpu(u32); n->pcpu_success = alloc_percpu(u32);
if (!n->pcpu_success) {
err = -ENOMEM;
goto errout;
}
if (tb[TCA_U32_MARK]) { if (tb[TCA_U32_MARK]) {
struct tc_u32_mark *mark; struct tc_u32_mark *mark;
...@@ -720,6 +727,12 @@ static int u32_change(struct net *net, struct sk_buff *in_skb, ...@@ -720,6 +727,12 @@ static int u32_change(struct net *net, struct sk_buff *in_skb,
*arg = (unsigned long)n; *arg = (unsigned long)n;
return 0; return 0;
} }
#ifdef CONFIG_CLS_U32_MARK
free_percpu(n->pcpu_success);
#endif
errout:
#ifdef CONFIG_CLS_U32_PERF #ifdef CONFIG_CLS_U32_PERF
free_percpu(n->pf); free_percpu(n->pf);
#endif #endif
......
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