]> err.no Git - linux-2.6/commitdiff
[PKT_SCHED] ematch: tcf_em_destroy robustness
authorStephen Hemminger <shemminger@vyatta.com>
Sun, 10 Feb 2008 07:26:53 +0000 (23:26 -0800)
committerDavid S. Miller <davem@davemloft.net>
Sun, 10 Feb 2008 07:26:53 +0000 (23:26 -0800)
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>
net/sched/ematch.c

index d421ec728ee7e795b3ddb3795859242dd5fa5b2b..b29439ddcf717053923a38b610a8ee89cac17744 100644 (file)
@@ -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);