]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
expression: fix constant expression allocation on big endian with partial bytes
authorSabrina Dubroca <sd@queasysnail.net>
Thu, 19 Apr 2018 08:45:23 +0000 (10:45 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Thu, 19 Apr 2018 11:03:53 +0000 (13:03 +0200)
Commit 5259feeb7cda ("expression: fix constant expression allocation on
big endian") improved constant handling on big endian, but didn't handle
the case of partial bytes correctly.

Currently, constant_data_ptr(val, 6) points to the item after val,
instead of the last byte of val.

Thanks to Stefano for providing the correct expression.

Fixes: 5259feeb7cda ("expression: fix constant expression allocation on big endian")
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/utils.h

index 310389c22fab6d7d49c639729aa318c2ef6ea88c..01560eae8d7f759f80625963cc37d6dac47d8cf6 100644 (file)
@@ -51,7 +51,7 @@
        ((void *)&(val))
 #elif defined(__BIG_ENDIAN_BITFIELD)
 #define constant_data_ptr(val, len) \
-       ((void *)&(val) + sizeof(val) - (len) / BITS_PER_BYTE)
+       ((void *)&(val) + sizeof(val) - div_round_up(len, BITS_PER_BYTE))
 #else
 #error "byteorder undefined"
 #endif