Message ID | 20210820161237.18821-1-shaw.leon@gmail.com |
---|---|
State | Accepted |
Delegated to: | Pablo Neira |
Headers | show |
Series | [nftables] src: Optimize prefix match only if is big-endian | expand |
On Sat, Aug 21, 2021 at 12:12:37AM +0800, Xiao Liang wrote: > A prefix of integer type is big-endian in nature. Prefix match can be > optimized to truncated 'cmp' only if it is big-endian. Applied, thanks.
diff --git a/src/netlink_linearize.c b/src/netlink_linearize.c index eb53ccec..454b9ba3 100644 --- a/src/netlink_linearize.c +++ b/src/netlink_linearize.c @@ -548,7 +548,8 @@ static void netlink_gen_relational(struct netlink_linearize_ctx *ctx, case EXPR_PREFIX: sreg = get_register(ctx, expr->left); if (expr_basetype(expr->left)->type != TYPE_STRING && - (!expr->right->prefix_len || + (expr->right->byteorder != BYTEORDER_BIG_ENDIAN || + !expr->right->prefix_len || expr->right->prefix_len % BITS_PER_BYTE)) { len = div_round_up(expr->right->len, BITS_PER_BYTE); netlink_gen_expr(ctx, expr->left, sreg);
A prefix of integer type is big-endian in nature. Prefix match can be optimized to truncated 'cmp' only if it is big-endian. Signed-off-by: Xiao Liang <shaw.leon@gmail.com> --- src/netlink_linearize.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)