]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
netlink_linearize: fix range cmp instruction generation
authorPatrick McHardy <kaber@trash.net>
Tue, 2 Jun 2015 10:53:10 +0000 (12:53 +0200)
committerPatrick McHardy <kaber@trash.net>
Tue, 2 Jun 2015 10:53:10 +0000 (12:53 +0200)
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>
src/netlink_linearize.c

index 9bef67b38c9adbd925c6194dfa7a288468e3f1e2..0a0b68648e2179a31f2007a68129051209afdffd 100644 (file)
@@ -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;
        }