diff options
Diffstat (limited to 'net/sched/ematch.c')
-rw-r--r-- | net/sched/ematch.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/net/sched/ematch.c b/net/sched/ematch.c index 74ff918455a2..b29439ddcf71 100644 --- a/net/sched/ematch.c +++ b/net/sched/ematch.c | |||
@@ -312,10 +312,9 @@ int tcf_em_tree_validate(struct tcf_proto *tp, struct nlattr *nla, | |||
312 | struct tcf_ematch_tree_hdr *tree_hdr; | 312 | struct tcf_ematch_tree_hdr *tree_hdr; |
313 | struct tcf_ematch *em; | 313 | struct tcf_ematch *em; |
314 | 314 | ||
315 | if (!nla) { | 315 | memset(tree, 0, sizeof(*tree)); |
316 | memset(tree, 0, sizeof(*tree)); | 316 | if (!nla) |
317 | return 0; | 317 | return 0; |
318 | } | ||
319 | 318 | ||
320 | err = nla_parse_nested(tb, TCA_EMATCH_TREE_MAX, nla, em_policy); | 319 | err = nla_parse_nested(tb, TCA_EMATCH_TREE_MAX, nla, em_policy); |
321 | if (err < 0) | 320 | if (err < 0) |
@@ -410,14 +409,15 @@ void tcf_em_tree_destroy(struct tcf_proto *tp, struct tcf_ematch_tree *tree) | |||
410 | if (em->ops) { | 409 | if (em->ops) { |
411 | if (em->ops->destroy) | 410 | if (em->ops->destroy) |
412 | em->ops->destroy(tp, em); | 411 | em->ops->destroy(tp, em); |
413 | else if (!tcf_em_is_simple(em) && em->data) | 412 | else if (!tcf_em_is_simple(em)) |
414 | kfree((void *) em->data); | 413 | kfree(em->data); |
415 | module_put(em->ops->owner); | 414 | module_put(em->ops->owner); |
416 | } | 415 | } |
417 | } | 416 | } |
418 | 417 | ||
419 | tree->hdr.nmatches = 0; | 418 | tree->hdr.nmatches = 0; |
420 | kfree(tree->matches); | 419 | kfree(tree->matches); |
420 | tree->matches = NULL; | ||
421 | } | 421 | } |
422 | EXPORT_SYMBOL(tcf_em_tree_destroy); | 422 | EXPORT_SYMBOL(tcf_em_tree_destroy); |
423 | 423 | ||