aboutsummaryrefslogtreecommitdiff
path: root/net/sched
diff options
context:
space:
mode:
authorStephen Hemminger <shemminger@vyatta.com>2008-02-09 23:26:53 -0800
committerDavid S. Miller <davem@davemloft.net>2008-02-09 23:26:53 -0800
commit954415e33ed6cfa932c13e8c2460bd05e50723b5 (patch)
tree6587b63b3d5ba528b446eabf1c6af5134e4c3464 /net/sched
parented7af3b3501c8c4e3667c89c2c43347bf29ae237 (diff)
[PKT_SCHED] ematch: tcf_em_destroy robustness
Make the code in tcf_em_tree_destroy more robust and cleaner: * Don't need to cast pointer to kfree() or avoid passing NULL. * After freeing the tree, clear the pointer to avoid possible problems from repeated free. Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched')
-rw-r--r--net/sched/ematch.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/net/sched/ematch.c b/net/sched/ematch.c
index d421ec728ee..b29439ddcf7 100644
--- a/net/sched/ematch.c
+++ b/net/sched/ematch.c
@@ -409,14 +409,15 @@ void tcf_em_tree_destroy(struct tcf_proto *tp, struct tcf_ematch_tree *tree)
if (em->ops) {
if (em->ops->destroy)
em->ops->destroy(tp, em);
- else if (!tcf_em_is_simple(em) && em->data)
- kfree((void *) em->data);
+ else if (!tcf_em_is_simple(em))
+ kfree(em->data);
module_put(em->ops->owner);
}
}
tree->hdr.nmatches = 0;
kfree(tree->matches);
+ tree->matches = NULL;
}
EXPORT_SYMBOL(tcf_em_tree_destroy);