Skip to content

Commit a8ee6b9

Browse files
Florian Westphalummakynes
authored andcommitted
netfilter: nf_tables: prepare for multiple elements in nft_trans_elem structure
Add helpers to release the individual elements contained in the trans_elem container structure. No functional change intended. Followup patch will add 'nelems' member and will turn 'priv' into a flexible array. These helpers can then loop over all elements. Care needs to be taken to handle a mix of new elements and existing elements that are being updated (e.g. timeout refresh). Before this patch, NEWSETELEM transaction with update is released early so nft_trans_set_elem_destroy() won't get called, so we need to skip elements marked as update. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
1 parent 4ee2918 commit a8ee6b9

File tree

2 files changed

+173
-76
lines changed

2 files changed

+173
-76
lines changed

include/net/netfilter/nf_tables.h

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1759,28 +1759,25 @@ enum nft_trans_elem_flags {
17591759
NFT_TRANS_UPD_EXPIRATION = (1 << 1),
17601760
};
17611761

1762-
struct nft_trans_elem {
1763-
struct nft_trans nft_trans;
1764-
struct nft_set *set;
1765-
struct nft_elem_priv *elem_priv;
1762+
struct nft_trans_one_elem {
1763+
struct nft_elem_priv *priv;
17661764
u64 timeout;
17671765
u64 expiration;
17681766
u8 update_flags;
1767+
};
1768+
1769+
struct nft_trans_elem {
1770+
struct nft_trans nft_trans;
1771+
struct nft_set *set;
17691772
bool bound;
1773+
unsigned int nelems;
1774+
struct nft_trans_one_elem elems[] __counted_by(nelems);
17701775
};
17711776

17721777
#define nft_trans_container_elem(t) \
17731778
container_of(t, struct nft_trans_elem, nft_trans)
17741779
#define nft_trans_elem_set(trans) \
17751780
nft_trans_container_elem(trans)->set
1776-
#define nft_trans_elem_priv(trans) \
1777-
nft_trans_container_elem(trans)->elem_priv
1778-
#define nft_trans_elem_update_flags(trans) \
1779-
nft_trans_container_elem(trans)->update_flags
1780-
#define nft_trans_elem_timeout(trans) \
1781-
nft_trans_container_elem(trans)->timeout
1782-
#define nft_trans_elem_expiration(trans) \
1783-
nft_trans_container_elem(trans)->expiration
17841781
#define nft_trans_elem_set_bound(trans) \
17851782
nft_trans_container_elem(trans)->bound
17861783

0 commit comments

Comments
 (0)