Skip to content

Commit d6b4786

Browse files
committed
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 <[email protected]>
1 parent 2b84e21 commit d6b4786

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
@@ -6668,19 +6668,19 @@ static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set,
66686668
if (flags)
66696669
*nft_set_ext_flags(ext) = flags;
66706670

6671+
if (obj) {
6672+
*nft_set_ext_obj(ext) = obj;
6673+
obj->use++;
6674+
}
66716675
if (ulen > 0) {
66726676
if (nft_set_ext_check(&tmpl, NFT_SET_EXT_USERDATA, ulen) < 0) {
66736677
err = -EINVAL;
6674-
goto err_elem_userdata;
6678+
goto err_elem_free;
66756679
}
66766680
udata = nft_set_ext_userdata(ext);
66776681
udata->len = ulen - 1;
66786682
nla_memcpy(&udata->data, nla[NFTA_SET_ELEM_USERDATA], ulen);
66796683
}
6680-
if (obj) {
6681-
*nft_set_ext_obj(ext) = obj;
6682-
obj->use++;
6683-
}
66846684
err = nft_set_elem_expr_setup(ctx, &tmpl, ext, expr_array, num_exprs);
66856685
if (err < 0)
66866686
goto err_elem_free;
@@ -6735,9 +6735,6 @@ static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set,
67356735
err_element_clash:
67366736
kfree(trans);
67376737
err_elem_free:
6738-
if (obj)
6739-
obj->use--;
6740-
err_elem_userdata:
67416738
nft_set_elem_destroy(set, elem.priv, true);
67426739
err_parse_data:
67436740
if (nla[NFTA_SET_ELEM_DATA] != NULL)

0 commit comments

Comments
 (0)