Skip to content

Commit 3965620

Browse files
committed
netfilter: nf_tables: fix underflow in object reference counter
JIRA: https://issues.redhat.com/browse/RHEL-1720 JIRA: https://issues.redhat.com/browse/RHEL-1721 Upstream Status: commit d6b4786 commit d6b4786 Author: Pablo Neira Ayuso <pablo@netfilter.org> Date: Fri Jun 16 15:20:08 2023 +0200 netfilter: nf_tables: fix underflow in object reference counter Since ("netfilter: nf_tables: drop map element references from preparation phase"), integration with commit protocol is better, therefore drop the workaround that b91d903 ("netfilter: nf_tables: fix leaking object reference count") provides. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> Signed-off-by: Florian Westphal <fwestpha@redhat.com>
1 parent e564400 commit 3965620

File tree

1 file changed

+5
-8
lines changed

1 file changed

+5
-8
lines changed

net/netfilter/nf_tables_api.c

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6442,19 +6442,19 @@ static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set,
64426442
if (flags)
64436443
*nft_set_ext_flags(ext) = flags;
64446444

6445+
if (obj) {
6446+
*nft_set_ext_obj(ext) = obj;
6447+
obj->use++;
6448+
}
64456449
if (ulen > 0) {
64466450
if (nft_set_ext_check(&tmpl, NFT_SET_EXT_USERDATA, ulen) < 0) {
64476451
err = -EINVAL;
6448-
goto err_elem_userdata;
6452+
goto err_elem_free;
64496453
}
64506454
udata = nft_set_ext_userdata(ext);
64516455
udata->len = ulen - 1;
64526456
nla_memcpy(&udata->data, nla[NFTA_SET_ELEM_USERDATA], ulen);
64536457
}
6454-
if (obj) {
6455-
*nft_set_ext_obj(ext) = obj;
6456-
obj->use++;
6457-
}
64586458
err = nft_set_elem_expr_setup(ctx, &tmpl, ext, expr_array, num_exprs);
64596459
if (err < 0)
64606460
goto err_elem_free;
@@ -6509,9 +6509,6 @@ static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set,
65096509
err_element_clash:
65106510
kfree(trans);
65116511
err_elem_free:
6512-
if (obj)
6513-
obj->use--;
6514-
err_elem_userdata:
65156512
nft_set_elem_destroy(set, elem.priv, true);
65166513
err_parse_data:
65176514
if (nla[NFTA_SET_ELEM_DATA] != NULL)

0 commit comments

Comments
 (0)