Skip to content

Commit

Permalink
net: cls_u32: fix missed pcpu_success free_percpu
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
John Fastabend authored and David S. Miller committed Sep 22, 2014
1 parent 37ab7dd commit a1ddcfe
Showing 1 changed file with 13 additions and 0 deletions.
13 changes: 13 additions & 0 deletions net/sched/cls_u32.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit a1ddcfe

Please sign in to comment.