From 8979727084d90e6061c8d0f562f8f12e784a657d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Falgueras=20Garc=C3=ADa?= Date: Tue, 17 May 2016 18:00:16 +0200 Subject: netlink_linearize: do not duplicate user data when linearizing user data MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Otherwise, we memory leak this area since nftnl_rule_set_data() now makes a copy of the user data which receives. This is happening since libnftnl's ("rule: Fix segfault due to invalid free of rule user data"), it is not necessary make a copy before call it. Note: Carlos originally posted this patch under the name of ("nftables: Fix memory leak linearizing user data"). Signed-off-by: Carlos Falgueras GarcĂ­a Signed-off-by: Pablo Neira Ayuso --- src/netlink_linearize.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) (limited to 'src/netlink_linearize.c') diff --git a/src/netlink_linearize.c b/src/netlink_linearize.c index 62bb25c4..98c22d88 100644 --- a/src/netlink_linearize.c +++ b/src/netlink_linearize.c @@ -1127,8 +1127,6 @@ void netlink_linearize_rule(struct netlink_ctx *ctx, struct nftnl_rule *nlr, if (rule->comment) { struct nftnl_udata_buf *udata; - uint32_t udlen; - void *ud; udata = nftnl_udata_buf_alloc(NFT_USERDATA_MAXLEN); if (!udata) @@ -1137,12 +1135,9 @@ void netlink_linearize_rule(struct netlink_ctx *ctx, struct nftnl_rule *nlr, if (!nftnl_udata_put_strz(udata, UDATA_TYPE_COMMENT, rule->comment)) memory_allocation_error(); - - udlen = nftnl_udata_buf_len(udata); - ud = xmalloc(udlen); - memcpy(ud, nftnl_udata_buf_data(udata), udlen); - - nftnl_rule_set_data(nlr, NFTNL_RULE_USERDATA, ud, udlen); + nftnl_rule_set_data(nlr, NFTNL_RULE_USERDATA, + nftnl_udata_buf_data(udata), + nftnl_udata_buf_len(udata)); nftnl_udata_buf_free(udata); } -- cgit v1.2.3