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: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
aaa7b20bd4
commit
4e2b29d881
|
@ -85,6 +85,16 @@ 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,
|
||||
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)
|
|||
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 const struct nft_expr_ops nft_ng_inc_ops = {
|
||||
.type = &nft_ng_type,
|
||||
|
@ -180,6 +200,7 @@ static const struct nft_expr_ops nft_ng_inc_ops = {
|
|||
.init = nft_ng_inc_init,
|
||||
.destroy = nft_ng_inc_destroy,
|
||||
.dump = nft_ng_inc_dump,
|
||||
.reduce = nft_ng_inc_reduce,
|
||||
};
|
||||
|
||||
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,
|
||||
.init = nft_ng_random_init,
|
||||
.dump = nft_ng_random_dump,
|
||||
.reduce = nft_ng_random_reduce,
|
||||
};
|
||||
|
||||
static const struct nft_expr_ops *
|
||||
|
|
Loading…
Reference in New Issue