diff options
author | Jeremy Sowden <jeremy@azazel.net> | 2023-03-17 10:16:36 +0100 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2023-03-22 16:54:06 +0100 |
commit | fe623a50949203fa979a79adc8f8af35b74b534c (patch) | |
tree | bf4e70c96f9c4268bcefe36f7836aa5d6ca2fa14 /src | |
parent | 5adb51190c967d28ef7f23464807f7bc86636978 (diff) |
evaluate: insert byte-order conversions for expressions between 9 and 15 bits
Round up expression lengths when determining whether to insert a
byte-order conversion. For example, if one is masking a network header
which spans a byte boundary, the mask will span two bytes and so it will
need to be in NBO.
Fixes: bb03cbcd18a1 ("evaluate: no need to swap byte-order for values of fewer than 16 bits.")
Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/evaluate.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/evaluate.c b/src/evaluate.c index edc3c5cb..21d36049 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -193,7 +193,7 @@ static int byteorder_conversion(struct eval_ctx *ctx, struct expr **expr, byteorder_names[(*expr)->byteorder]); } - if (expr_is_constant(*expr) || (*expr)->len / BITS_PER_BYTE < 2) + if (expr_is_constant(*expr) || div_round_up((*expr)->len, BITS_PER_BYTE) < 2) (*expr)->byteorder = byteorder; else { op = byteorder_conversion_op(*expr, byteorder); |