[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>
This commit is contained in:
parent
ed7af3b350
commit
954415e33e
|
@ -409,14 +409,15 @@ void tcf_em_tree_destroy(struct tcf_proto *tp, struct tcf_ematch_tree *tree)
|
||||||
if (em->ops) {
|
if (em->ops) {
|
||||||
if (em->ops->destroy)
|
if (em->ops->destroy)
|
||||||
em->ops->destroy(tp, em);
|
em->ops->destroy(tp, em);
|
||||||
else if (!tcf_em_is_simple(em) && em->data)
|
else if (!tcf_em_is_simple(em))
|
||||||
kfree((void *) em->data);
|
kfree(em->data);
|
||||||
module_put(em->ops->owner);
|
module_put(em->ops->owner);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tree->hdr.nmatches = 0;
|
tree->hdr.nmatches = 0;
|
||||||
kfree(tree->matches);
|
kfree(tree->matches);
|
||||||
|
tree->matches = NULL;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(tcf_em_tree_destroy);
|
EXPORT_SYMBOL(tcf_em_tree_destroy);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue