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>
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);
right = expr->right->prefix;
break;
}
- case EXPR_RANGE:
- return netlink_gen_range(ctx, expr, dreg);
default:
right = expr->right;
}