]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
evaluate: propagate binop_transfer() adjustment to set key size
authorPablo Neira Ayuso <pablo@netfilter.org>
Tue, 3 Apr 2018 11:00:31 +0000 (13:00 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Tue, 3 Apr 2018 11:07:03 +0000 (13:07 +0200)
The right shift transfer may be result in adjusting the set key size,
eg. ip6 dscp results in fetching 6 bits that are splitted between two
bytes, hence the set element ends up being 16 bytes long.

Reported-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/evaluate.c

index d69610995897677a215e4dc5f886cee1124cad32..967ad162e46e579af2b42dfb1cc13e258fe005b7 100644 (file)
@@ -1282,8 +1282,9 @@ static int expr_evaluate_map(struct eval_ctx *ctx, struct expr **expr)
                if (binop_transfer(ctx, expr) < 0)
                        return -1;
 
-               map = *expr;
+               ctx->set->key->len = ctx->ectx.len;
                ctx->set = NULL;
+               map = *expr;
                map->mappings->set->flags |= map->mappings->set->init->set_flags;
                break;
        case EXPR_SYMBOL: