Commit 4e2b29d8 authored by Pablo Neira Ayuso's avatar Pablo Neira Ayuso

netfilter: nft_numgen: cancel register tracking

Random and increment are stateful, each invocation results in fresh output.
Cancel register tracking for these two expressions.
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent aaa7b20b
...@@ -85,6 +85,16 @@ static int nft_ng_inc_init(const struct nft_ctx *ctx, ...@@ -85,6 +85,16 @@ static int nft_ng_inc_init(const struct nft_ctx *ctx,
return err; return err;
} }
static bool nft_ng_inc_reduce(struct nft_regs_track *track,
const struct nft_expr *expr)
{
const struct nft_ng_inc *priv = nft_expr_priv(expr);
nft_reg_track_cancel(track, priv->dreg, NFT_REG32_SIZE);
return false;
}
static int nft_ng_dump(struct sk_buff *skb, enum nft_registers dreg, static int nft_ng_dump(struct sk_buff *skb, enum nft_registers dreg,
u32 modulus, enum nft_ng_types type, u32 offset) u32 modulus, enum nft_ng_types type, u32 offset)
{ {
...@@ -172,6 +182,16 @@ static int nft_ng_random_dump(struct sk_buff *skb, const struct nft_expr *expr) ...@@ -172,6 +182,16 @@ static int nft_ng_random_dump(struct sk_buff *skb, const struct nft_expr *expr)
priv->offset); priv->offset);
} }
static bool nft_ng_random_reduce(struct nft_regs_track *track,
const struct nft_expr *expr)
{
const struct nft_ng_random *priv = nft_expr_priv(expr);
nft_reg_track_cancel(track, priv->dreg, NFT_REG32_SIZE);
return false;
}
static struct nft_expr_type nft_ng_type; static struct nft_expr_type nft_ng_type;
static const struct nft_expr_ops nft_ng_inc_ops = { static const struct nft_expr_ops nft_ng_inc_ops = {
.type = &nft_ng_type, .type = &nft_ng_type,
...@@ -180,6 +200,7 @@ static const struct nft_expr_ops nft_ng_inc_ops = { ...@@ -180,6 +200,7 @@ static const struct nft_expr_ops nft_ng_inc_ops = {
.init = nft_ng_inc_init, .init = nft_ng_inc_init,
.destroy = nft_ng_inc_destroy, .destroy = nft_ng_inc_destroy,
.dump = nft_ng_inc_dump, .dump = nft_ng_inc_dump,
.reduce = nft_ng_inc_reduce,
}; };
static const struct nft_expr_ops nft_ng_random_ops = { static const struct nft_expr_ops nft_ng_random_ops = {
...@@ -188,6 +209,7 @@ static const struct nft_expr_ops nft_ng_random_ops = { ...@@ -188,6 +209,7 @@ static const struct nft_expr_ops nft_ng_random_ops = {
.eval = nft_ng_random_eval, .eval = nft_ng_random_eval,
.init = nft_ng_random_init, .init = nft_ng_random_init,
.dump = nft_ng_random_dump, .dump = nft_ng_random_dump,
.reduce = nft_ng_random_reduce,
}; };
static const struct nft_expr_ops * static const struct nft_expr_ops *
......
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