Commit a0a7379e authored by Pablo Neira Ayuso's avatar Pablo Neira Ayuso

netfilter: nf_tables: use u32 for chain use counter

Since 4fefee57 ("netfilter: nf_tables: allow to delete several objects
from a batch"), every new rule bumps the chain use counter. However,
this is limited to 16 bits, which means that it will overrun after
2^16 rules.

Use a u32 chain counter and check for overflows (just like we do for
table objects).
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent 5bc5c307
...@@ -503,9 +503,9 @@ enum nft_chain_flags { ...@@ -503,9 +503,9 @@ enum nft_chain_flags {
* @net: net namespace that this chain belongs to * @net: net namespace that this chain belongs to
* @table: table that this chain belongs to * @table: table that this chain belongs to
* @handle: chain handle * @handle: chain handle
* @flags: bitmask of enum nft_chain_flags
* @use: number of jump references to this chain * @use: number of jump references to this chain
* @level: length of longest path to this chain * @level: length of longest path to this chain
* @flags: bitmask of enum nft_chain_flags
* @name: name of the chain * @name: name of the chain
*/ */
struct nft_chain { struct nft_chain {
...@@ -514,9 +514,9 @@ struct nft_chain { ...@@ -514,9 +514,9 @@ struct nft_chain {
struct net *net; struct net *net;
struct nft_table *table; struct nft_table *table;
u64 handle; u64 handle;
u8 flags; u32 use;
u16 use;
u16 level; u16 level;
u8 flags;
char name[NFT_CHAIN_MAXNAMELEN]; char name[NFT_CHAIN_MAXNAMELEN];
}; };
......
...@@ -1730,6 +1730,9 @@ static int nf_tables_newrule(struct sock *nlsk, struct sk_buff *skb, ...@@ -1730,6 +1730,9 @@ static int nf_tables_newrule(struct sock *nlsk, struct sk_buff *skb,
if (!create || nlh->nlmsg_flags & NLM_F_REPLACE) if (!create || nlh->nlmsg_flags & NLM_F_REPLACE)
return -EINVAL; return -EINVAL;
handle = nf_tables_alloc_handle(table); handle = nf_tables_alloc_handle(table);
if (chain->use == UINT_MAX)
return -EOVERFLOW;
} }
if (nla[NFTA_RULE_POSITION]) { if (nla[NFTA_RULE_POSITION]) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment