summaryrefslogtreecommitdiffstats
path: root/src/netlink_linearize.c
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2015-06-02 12:53:10 +0200
committerPatrick McHardy <kaber@trash.net>2015-06-02 12:53:10 +0200
commit5764e58f0e0b3ace1b1c1cdb5c149a6c679ff6d6 (patch)
tree96ea2affa3b1e6d23bf90a22d942fe06d1e4d134 /src/netlink_linearize.c
parentfd8a16b8517307514d1a9100c5dfd5098d1a52cb (diff)
netlink_linearize: fix range cmp instruction generation
The LHS expression is generated twice and the register not properly released. Fix by calling netlink_gen_range() before generating the LHS. Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'src/netlink_linearize.c')
-rw-r--r--src/netlink_linearize.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/netlink_linearize.c b/src/netlink_linearize.c
index 9bef67b3..0a0b6864 100644
--- a/src/netlink_linearize.c
+++ b/src/netlink_linearize.c
@@ -203,6 +203,9 @@ static void netlink_gen_cmp(struct netlink_linearize_ctx *ctx,
assert(dreg == NFT_REG_VERDICT);
+ if (expr->right->ops->type == EXPR_RANGE)
+ return netlink_gen_range(ctx, expr, dreg);
+
sreg = get_register(ctx);
netlink_gen_expr(ctx, expr->left, sreg);
@@ -229,8 +232,6 @@ static void netlink_gen_cmp(struct netlink_linearize_ctx *ctx,
right = expr->right->prefix;
break;
}
- case EXPR_RANGE:
- return netlink_gen_range(ctx, expr, dreg);
default:
right = expr->right;
}