netfilter: nf_tables: use u32 for chain use counter
Since 4fefee5
("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: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
5bc5c30765
commit
a0a7379e16
|
@ -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 {
|
||||||
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,
|
||||||
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]) {
|
||||||
|
|
Loading…
Reference in New Issue