diff options
author | Phil Sutter <phil@nwl.cc> | 2018-10-12 12:54:09 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2018-10-15 13:37:51 +0200 |
commit | 30541cb66e2de38eea04ab28cb14f298cce9d99f (patch) | |
tree | c1527a8b593fa731606ac3c5e70d56bda2115abd | |
parent | 16694bdd4c01ae001b60fbc18d45200fffc84de5 (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.c | 13 |
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; } |