]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
evaluate: incorrect byteorder with typeof and integer_datatype
authorPablo Neira Ayuso <pablo@netfilter.org>
Wed, 29 Apr 2020 10:10:07 +0000 (12:10 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 29 Apr 2020 10:31:04 +0000 (12:31 +0200)
 table bridge t {
         set s3 {
                 typeof meta ibrpvid
                 elements = { 2, 3, 103 }
         }
 }

 # nft --debug=netlink -f test.nft
 s3 t 0
 s3 t 0
        element 00000100  : 0 [end]     element 00000200  : 0 [end]     element 00000300  : 0 [end]
                ^^^^^^^^

The integer_type uses BYTEORDER_INVALID byteorder (which is implicitly
handled as BYTEORDER_BIG_ENDIAN).

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/evaluate.c
tests/shell/testcases/sets/dumps/typeof_sets_0.nft
tests/shell/testcases/sets/typeof_sets_0

index 8c227eb11402e3d008733ee88d48f5c52a990cf3..59714131700034ba155b0d3adf06771def1b6c36 100644 (file)
@@ -3544,7 +3544,8 @@ static int set_evaluate(struct eval_ctx *ctx, struct set *set)
 
        ctx->set = set;
        if (set->init != NULL) {
-               expr_set_context(&ctx->ectx, set->key->dtype, set->key->len);
+               __expr_set_context(&ctx->ectx, set->key->dtype,
+                                  set->key->byteorder, set->key->len, 0);
                if (expr_evaluate(ctx, &set->init) < 0)
                        return -1;
        }
index 44e11202d299b55254490a8dca754da9fe78fa6b..565369fb7be5b65ea8ff28b7d3cb55abb518fad2 100644 (file)
@@ -9,6 +9,11 @@ table inet t {
                elements = { 2, 3, 103 }
        }
 
+       set s3 {
+               typeof meta ibrpvid
+               elements = { 2, 3, 103 }
+       }
+
        chain c1 {
                osf name @s1 accept
        }
index 2a8b21c725c6908461ad9999660196847c717913..9b2712e5617777d5f93088f26123910600cea0e7 100755 (executable)
@@ -15,6 +15,11 @@ EXPECTED="table inet t {
                elements = { 2, 3, 103 }
        }
 
+       set s3 {
+               typeof meta ibrpvid
+               elements = { 2, 3, 103 }
+       }
+
        chain c1 {
                osf name @s1 accept
        }