From 954415e33ed6cfa932c13e8c2460bd05e50723b5 Mon Sep 17 00:00:00 2001
From: Stephen Hemminger <shemminger@vyatta.com>
Date: Sat, 9 Feb 2008 23:26:53 -0800
Subject: [PATCH] [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>
---
 net/sched/ematch.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/net/sched/ematch.c b/net/sched/ematch.c
index d421ec728ee7e..b29439ddcf717 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);
 
-- 
GitLab