summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhil Sutter <phil@nwl.cc>2018-10-12 12:54:09 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2018-10-15 13:37:51 +0200
commit30541cb66e2de38eea04ab28cb14f298cce9d99f (patch)
treec1527a8b593fa731606ac3c5e70d56bda2115abd
parent16694bdd4c01ae001b60fbc18d45200fffc84de5 (diff)
Fix memleak in netlink_parse_fwd() error path
Make sure allocated 'stmt' is freed before returning to caller. Fixes: 30d45266bf38b ("expr: extend fwd statement to support address and family") Signed-off-by: Phil Sutter <phil@nwl.cc> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r--src/netlink_delinearize.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/netlink_delinearize.c b/src/netlink_delinearize.c
index 0a6ebe05..cd058850 100644
--- a/src/netlink_delinearize.c
+++ b/src/netlink_delinearize.c
@@ -1227,9 +1227,11 @@ static void netlink_parse_fwd(struct netlink_parse_ctx *ctx,
reg2 = netlink_parse_register(nle, NFTNL_EXPR_FWD_SREG_ADDR);
if (reg2) {
addr = netlink_get_register(ctx, loc, reg2);
- if (addr == NULL)
- return netlink_error(ctx, loc,
- "fwd statement has no output expression");
+ if (addr == NULL) {
+ netlink_error(ctx, loc,
+ "fwd statement has no output expression");
+ goto out_err;
+ }
switch (stmt->fwd.family) {
case AF_INET:
@@ -1241,8 +1243,9 @@ static void netlink_parse_fwd(struct netlink_parse_ctx *ctx,
BYTEORDER_BIG_ENDIAN);
break;
default:
- return netlink_error(ctx, loc,
- "fwd statement has no family");
+ netlink_error(ctx, loc,
+ "fwd statement has no family");
+ goto out_err;
}
stmt->fwd.addr = addr;
}