From 22d2010109193e6ee201d7cd4e8aaf5cda4539a0 Mon Sep 17 00:00:00 2001 From: "Anders K. Pedersen" Date: Wed, 4 Oct 2017 14:27:45 +0000 Subject: netlink_linearize: skip set element expression in set statement key Before this patch the following fails: # nft add rule ip6 filter x \ set add ip6 saddr . ip6 daddr @test nft: netlink_linearize.c:648: netlink_gen_expr: Assertion `dreg < ctx->reg_low' failed. Aborted This is was previously fixed for flow statements in fbea4a6f4449 ("netlink_linearize: skip set element expression in flow table key"), and this patch implements the same change for set statements by using the set element key in netlink_gen_set_stmt(). nft-test.py is updated to support set types with concatenated data types in order to support testing of this. Signed-off-by: Anders K. Pedersen Signed-off-by: Pablo Neira Ayuso --- src/netlink_linearize.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/netlink_linearize.c') diff --git a/src/netlink_linearize.c b/src/netlink_linearize.c index 1712cba2..fb2d2501 100644 --- a/src/netlink_linearize.c +++ b/src/netlink_linearize.c @@ -1208,9 +1208,9 @@ static void netlink_gen_set_stmt(struct netlink_linearize_ctx *ctx, struct nftnl_expr *nle; enum nft_registers sreg_key; - sreg_key = get_register(ctx, stmt->set.key); - netlink_gen_expr(ctx, stmt->set.key, sreg_key); - release_register(ctx, stmt->set.key); + sreg_key = get_register(ctx, stmt->set.key->key); + netlink_gen_expr(ctx, stmt->set.key->key, sreg_key); + release_register(ctx, stmt->set.key->key); nle = alloc_nft_expr("dynset"); netlink_put_register(nle, NFTNL_EXPR_DYNSET_SREG_KEY, sreg_key); -- cgit v1.2.3