Commit f459bfd4 authored by Pablo Neira Ayuso's avatar Pablo Neira Ayuso
Browse files

netfilter: nft_byteorder: track register operations



Cancel tracking for byteorder operation, otherwise selector + byteorder
operation is incorrectly reduced if source and destination registers are
the same.

Reported-by: default avatarkernel test robot <oliver.sang@intel.com>
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent aeac4554
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -167,12 +167,24 @@ static int nft_byteorder_dump(struct sk_buff *skb, const struct nft_expr *expr)
	return -1;
}

static bool nft_byteorder_reduce(struct nft_regs_track *track,
				 const struct nft_expr *expr)
{
	struct nft_byteorder *priv = nft_expr_priv(expr);

	track->regs[priv->dreg].selector = NULL;
	track->regs[priv->dreg].bitwise = NULL;

	return false;
}

static const struct nft_expr_ops nft_byteorder_ops = {
	.type		= &nft_byteorder_type,
	.size		= NFT_EXPR_SIZE(sizeof(struct nft_byteorder)),
	.eval		= nft_byteorder_eval,
	.init		= nft_byteorder_init,
	.dump		= nft_byteorder_dump,
	.reduce		= nft_byteorder_reduce,
};

struct nft_expr_type nft_byteorder_type __read_mostly = {