aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorColin Ian King <colin.king@canonical.com>2018-05-09 08:22:56 -0400
committerPablo Neira Ayuso <pablo@netfilter.org>2018-05-13 18:21:59 -0400
commitf0dfd7a2b35b02030949100247d851b793cb275f (patch)
tree0bc300372afa47f3ccda569904fccf12bc6c2df3
parentbb7b40aecbf778c0c83a5bd62b0f03ca9f49a618 (diff)
netfilter: nf_tables: fix memory leak on error exit return
Currently the -EBUSY error return path is not free'ing resources allocated earlier, leaving a memory leak. Fix this by exiting via the error exit label err5 that performs the necessary resource clean up. Detected by CoverityScan, CID#1432975 ("Resource leak") Fixes: 9744a6fcefcb ("netfilter: nf_tables: check if same extensions are set when adding elements") Signed-off-by: Colin Ian King <colin.king@canonical.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r--net/netfilter/nf_tables_api.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
index 3806db31cbbf..91e80aa852d6 100644
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -4080,8 +4080,10 @@ static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set,
4080 if (nft_set_ext_exists(ext, NFT_SET_EXT_DATA) ^ 4080 if (nft_set_ext_exists(ext, NFT_SET_EXT_DATA) ^
4081 nft_set_ext_exists(ext2, NFT_SET_EXT_DATA) || 4081 nft_set_ext_exists(ext2, NFT_SET_EXT_DATA) ||
4082 nft_set_ext_exists(ext, NFT_SET_EXT_OBJREF) ^ 4082 nft_set_ext_exists(ext, NFT_SET_EXT_OBJREF) ^
4083 nft_set_ext_exists(ext2, NFT_SET_EXT_OBJREF)) 4083 nft_set_ext_exists(ext2, NFT_SET_EXT_OBJREF)) {
4084 return -EBUSY; 4084 err = -EBUSY;
4085 goto err5;
4086 }
4085 if ((nft_set_ext_exists(ext, NFT_SET_EXT_DATA) && 4087 if ((nft_set_ext_exists(ext, NFT_SET_EXT_DATA) &&
4086 nft_set_ext_exists(ext2, NFT_SET_EXT_DATA) && 4088 nft_set_ext_exists(ext2, NFT_SET_EXT_DATA) &&
4087 memcmp(nft_set_ext_data(ext), 4089 memcmp(nft_set_ext_data(ext),