]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
evaluate: change shift byte-order to host-endian.
authorJeremy Sowden <jeremy@azazel.net>
Mon, 3 Feb 2020 11:20:20 +0000 (11:20 +0000)
committerPablo Neira Ayuso <pablo@netfilter.org>
Fri, 7 Feb 2020 15:57:30 +0000 (16:57 +0100)
The byte-order of the righthand operands of the right-shifts generated
for payload and exthdr expressions is big-endian.  However, all right
operands should be host-endian.  Since evaluation of the shift binop
will insert a byte-order conversion to enforce this, change the
endianness in order to avoid the extra operation.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/evaluate.c

index b6c05a81ee6de216cb65d1ef0e1f46a16c957b83..a3cbf9398b66b675b2d6ba21f4a7fede10b13fb7 100644 (file)
@@ -492,7 +492,7 @@ static void expr_evaluate_bits(struct eval_ctx *ctx, struct expr **exprp)
        if (shift) {
                off = constant_expr_alloc(&expr->location,
                                          expr_basetype(expr),
-                                         BYTEORDER_BIG_ENDIAN,
+                                         BYTEORDER_HOST_ENDIAN,
                                          sizeof(shift), &shift);
 
                rshift = binop_expr_alloc(&expr->location, OP_RSHIFT, and, off);