Blame SOURCES/0009-evaluate-Fix-memleak-in-stmt_reject_gen_dependency.patch

ba04b3
From 56d8528fdd3c3f7db138622d94d2a6bac6b46e4e Mon Sep 17 00:00:00 2001
ba04b3
From: Phil Sutter <psutter@redhat.com>
ba04b3
Date: Wed, 20 Jun 2018 09:22:47 +0200
ba04b3
Subject: [PATCH] evaluate: Fix memleak in stmt_reject_gen_dependency()
ba04b3
ba04b3
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1504157
ba04b3
Upstream Status: nftables commit edcf3adcf4c4c
ba04b3
ba04b3
commit edcf3adcf4c4cf58cb0b965b984a512b12181a58
ba04b3
Author: Phil Sutter <phil@nwl.cc>
ba04b3
Date:   Thu Mar 1 15:00:29 2018 +0100
ba04b3
ba04b3
    evaluate: Fix memleak in stmt_reject_gen_dependency()
ba04b3
ba04b3
    The allocated payload expression is not used after returning from that
ba04b3
    function, so it needs to be freed again.
ba04b3
ba04b3
    Simple test case:
ba04b3
ba04b3
    | nft add rule inet t c reject with tcp reset
ba04b3
ba04b3
    Valgrind reports definitely lost 144 bytes.
ba04b3
ba04b3
    Signed-off-by: Phil Sutter <phil@nwl.cc>
ba04b3
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
ba04b3
---
ba04b3
 src/evaluate.c | 10 +++++++---
ba04b3
 1 file changed, 7 insertions(+), 3 deletions(-)
ba04b3
ba04b3
diff --git a/src/evaluate.c b/src/evaluate.c
ba04b3
index 25a7376..8552e4a 100644
ba04b3
--- a/src/evaluate.c
ba04b3
+++ b/src/evaluate.c
ba04b3
@@ -2136,8 +2136,10 @@ static int stmt_reject_gen_dependency(struct eval_ctx *ctx, struct stmt *stmt,
ba04b3
 	if (ret <= 0)
ba04b3
 		return ret;
ba04b3
 
ba04b3
-	if (payload_gen_dependency(ctx, payload, &nstmt) < 0)
ba04b3
-		return -1;
ba04b3
+	if (payload_gen_dependency(ctx, payload, &nstmt) < 0) {
ba04b3
+		ret = -1;
ba04b3
+		goto out;
ba04b3
+	}
ba04b3
 
ba04b3
 	/*
ba04b3
 	 * Unlike payload deps this adds the dependency at the beginning, i.e.
ba04b3
@@ -2148,7 +2150,9 @@ static int stmt_reject_gen_dependency(struct eval_ctx *ctx, struct stmt *stmt,
ba04b3
 	 * Otherwise we'd log things that won't be rejected.
ba04b3
 	 */
ba04b3
 	list_add(&nstmt->list, &ctx->rule->stmts);
ba04b3
-	return 0;
ba04b3
+out:
ba04b3
+	xfree(payload);
ba04b3
+	return ret;
ba04b3
 }
ba04b3
 
ba04b3
 static int stmt_evaluate_reject_inet_family(struct eval_ctx *ctx,
ba04b3
-- 
ba04b3
1.8.3.1
ba04b3