From: Pablo Neira Ayuso Date: Wed, 29 Apr 2020 10:10:07 +0000 (+0200) Subject: evaluate: incorrect byteorder with typeof and integer_datatype X-Git-Tag: v0.9.5~38 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=12467ee9379ee16cf0e9a943ded8054710097134;p=thirdparty%2Fnftables.git evaluate: incorrect byteorder with typeof and integer_datatype 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 --- diff --git a/src/evaluate.c b/src/evaluate.c index 8c227eb1..59714131 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -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; } diff --git a/tests/shell/testcases/sets/dumps/typeof_sets_0.nft b/tests/shell/testcases/sets/dumps/typeof_sets_0.nft index 44e11202..565369fb 100644 --- a/tests/shell/testcases/sets/dumps/typeof_sets_0.nft +++ b/tests/shell/testcases/sets/dumps/typeof_sets_0.nft @@ -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 } diff --git a/tests/shell/testcases/sets/typeof_sets_0 b/tests/shell/testcases/sets/typeof_sets_0 index 2a8b21c7..9b2712e5 100755 --- a/tests/shell/testcases/sets/typeof_sets_0 +++ b/tests/shell/testcases/sets/typeof_sets_0 @@ -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 }