Commit 347b408d authored by Pablo Neira Ayuso's avatar Pablo Neira Ayuso

netfilter: nf_tables: pass set description to ->privsize

The new non-resizable hashtable variant needs this to calculate the
size of the bucket array.
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent 2b664957
...@@ -351,7 +351,8 @@ struct nft_set_ops { ...@@ -351,7 +351,8 @@ struct nft_set_ops {
struct nft_set *set, struct nft_set *set,
struct nft_set_iter *iter); struct nft_set_iter *iter);
unsigned int (*privsize)(const struct nlattr * const nla[]); unsigned int (*privsize)(const struct nlattr * const nla[],
const struct nft_set_desc *desc);
bool (*estimate)(const struct nft_set_desc *desc, bool (*estimate)(const struct nft_set_desc *desc,
u32 features, u32 features,
struct nft_set_estimate *est); struct nft_set_estimate *est);
......
...@@ -3052,7 +3052,7 @@ static int nf_tables_newset(struct net *net, struct sock *nlsk, ...@@ -3052,7 +3052,7 @@ static int nf_tables_newset(struct net *net, struct sock *nlsk,
size = 0; size = 0;
if (ops->privsize != NULL) if (ops->privsize != NULL)
size = ops->privsize(nla); size = ops->privsize(nla, &desc);
err = -ENOMEM; err = -ENOMEM;
set = kzalloc(sizeof(*set) + size + udlen, GFP_KERNEL); set = kzalloc(sizeof(*set) + size + udlen, GFP_KERNEL);
......
...@@ -236,7 +236,8 @@ static inline u32 nft_bitmap_total_size(u32 klen) ...@@ -236,7 +236,8 @@ static inline u32 nft_bitmap_total_size(u32 klen)
return sizeof(struct nft_bitmap) + nft_bitmap_size(klen); return sizeof(struct nft_bitmap) + nft_bitmap_size(klen);
} }
static unsigned int nft_bitmap_privsize(const struct nlattr * const nla[]) static unsigned int nft_bitmap_privsize(const struct nlattr * const nla[],
const struct nft_set_desc *desc)
{ {
u32 klen = ntohl(nla_get_be32(nla[NFTA_SET_KEY_LEN])); u32 klen = ntohl(nla_get_be32(nla[NFTA_SET_KEY_LEN]));
......
...@@ -321,7 +321,8 @@ static void nft_rhash_gc(struct work_struct *work) ...@@ -321,7 +321,8 @@ static void nft_rhash_gc(struct work_struct *work)
nft_set_gc_interval(set)); nft_set_gc_interval(set));
} }
static unsigned int nft_rhash_privsize(const struct nlattr * const nla[]) static unsigned int nft_rhash_privsize(const struct nlattr * const nla[],
const struct nft_set_desc *desc)
{ {
return sizeof(struct nft_rhash); return sizeof(struct nft_rhash);
} }
......
...@@ -251,7 +251,8 @@ static void nft_rbtree_walk(const struct nft_ctx *ctx, ...@@ -251,7 +251,8 @@ static void nft_rbtree_walk(const struct nft_ctx *ctx,
read_unlock_bh(&priv->lock); read_unlock_bh(&priv->lock);
} }
static unsigned int nft_rbtree_privsize(const struct nlattr * const nla[]) static unsigned int nft_rbtree_privsize(const struct nlattr * const nla[],
const struct nft_set_desc *desc)
{ {
return sizeof(struct nft_rbtree); return sizeof(struct nft_rbtree);
} }
......
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