Skip to contentSkip to conversation

: Fix memory leaks in cls_u32.c error path

PATCH In review Patrick McHardy 1 participant 1 message Jan 11, 2005

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 2/6 : Fix memory leaks in cls_u32.c error path

# This is a BitKeeper generated diff -Nru style patch. #
# ChangeSet
# 2005/01/11 20:25:26+01:00 [email protected]
# [PKT_SCHED]: Fix memory leaks in cls_u32.c error path
#
# Also silence an unused-variable warning when CONFIG_CLS_U32_MARK is not set.
#
# Signed-off-by: Patrick McHardy <[email protected]>
#

# net/sched/cls_u32.c
#   2005/01/11 20:25:16+01:00 [email protected] +11 -5
#   [PKT_SCHED]: Fix memory leaks in cls_u32.c error path
#   
#   Also silence an unused-variable warning when CONFIG_CLS_U32_MARK is not set.
#   
#   Signed-off-by: Patrick McHardy <[email protected]>
# 
diff -Nru a/net/sched/cls_u32.c b/net/sched/cls_u32.c
--- a/net/sched/cls_u32.c	2005-01-11 22:32:10 +01:00
+++ b/net/sched/cls_u32.c	2005-01-11 22:32:10 +01:00
@@ -549,7 +549,6 @@
 	struct tc_u_hnode *ht;
 	struct tc_u_knode *n;
 	struct tc_u32_sel *s;
-	struct tc_u32_mark *mark;
 	struct rtattr *opt = tca[TCA_OPTIONS-1];
 	struct rtattr *tb[TCA_U32_MAX];
 	u32 htid;
@@ -654,15 +653,22 @@
 	n->fshift = i;
 }

-#ifdef CONFIG_CLS_U32_MARK
+#ifdef CONFIG_CLS_U32_MARK
if (tb[TCA_U32_MARK-1]) {
- if (RTA_PAYLOAD(tb[TCA_U32_MARK-1]) < sizeof(struct tc_u32_mark))
+ struct tc_u32_mark *mark;
+
+ if (RTA_PAYLOAD(tb[TCA_U32_MARK-1]) < sizeof(struct tc_u32_mark)) {
+#ifdef CONFIG_CLS_U32_PERF
+ kfree(n->pf);
+#endif
+ kfree(n);
return -EINVAL;
+ }
mark = RTA_DATA(tb[TCA_U32_MARK-1]); memcpy(&n->mark, mark, sizeof(struct tc_u32_mark)); n->mark.success = 0;
- }
-#endif
+ }
+#endif

err = u32_set_parms(tp, base, ht, n, tb, tca[TCA_RATE-1]); if (err == 0) {