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

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
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -85,6 +85,16 @@ static int nft_ng_inc_init(const struct nft_ctx *ctx,
	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 *