1
0
Fork 0

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: John Fastabend <john.r.fastabend@intel.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
wifi-calibration
John Fastabend 2014-09-19 21:50:04 -07:00 committed by David S. Miller
parent 37ab7ddf3f
commit a1ddcfee2d
1 changed files with 13 additions and 0 deletions

View File

@ -362,6 +362,9 @@ static int u32_destroy_key(struct tcf_proto *tp, struct tc_u_knode *n)
n->ht_down->refcnt--;
#ifdef CONFIG_CLS_U32_PERF
free_percpu(n->pf);
#endif
#ifdef CONFIG_CLS_U32_MARK
free_percpu(n->pcpu_success);
#endif
kfree(n);
return 0;
@ -693,6 +696,10 @@ static int u32_change(struct net *net, struct sk_buff *in_skb,
#ifdef CONFIG_CLS_U32_MARK
n->pcpu_success = alloc_percpu(u32);
if (!n->pcpu_success) {
err = -ENOMEM;
goto errout;
}
if (tb[TCA_U32_MARK]) {
struct tc_u32_mark *mark;
@ -720,6 +727,12 @@ static int u32_change(struct net *net, struct sk_buff *in_skb,
*arg = (unsigned long)n;
return 0;
}
#ifdef CONFIG_CLS_U32_MARK
free_percpu(n->pcpu_success);
#endif
errout:
#ifdef CONFIG_CLS_U32_PERF
free_percpu(n->pf);
#endif