summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2018-10-03 16:05:32 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2018-10-03 16:12:41 +0200
commit406d17db7e02f78d258edb38ac8571112ef8c767 (patch)
treea34faa80b7ebfb5a2f2980974f42f9cf13514d2e /src
parente08c8bbfeda80f3807ce3784558ce1fb6f0d2bc8 (diff)
rule: fix memleak in do_get_setelems()
Release set and elements in case of error. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src')
-rw-r--r--src/rule.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/src/rule.c b/src/rule.c
index e6d61b67..6d027c26 100644
--- a/src/rule.c
+++ b/src/rule.c
@@ -2190,17 +2190,15 @@ static int do_get_setelems(struct netlink_ctx *ctx, struct cmd *cmd,
/* Fetch from kernel the elements that have been requested .*/
err = netlink_get_setelem(ctx, &cmd->handle, &cmd->location,
table, new_set, init);
- if (err < 0)
- return err;
-
- __do_list_set(ctx, cmd, table, new_set);
+ if (err >= 0)
+ __do_list_set(ctx, cmd, table, new_set);
if (set->flags & NFT_SET_INTERVAL)
expr_free(init);
set_free(new_set);
- return 0;
+ return err;
}
static int do_command_get(struct netlink_ctx *ctx, struct cmd *cmd)