]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
netlink: swap byteorder for host-endian concat data
authorFlorian Westphal <fw@strlen.de>
Fri, 29 Apr 2022 18:32:37 +0000 (20:32 +0200)
committerFlorian Westphal <fw@strlen.de>
Mon, 9 May 2022 07:11:58 +0000 (09:11 +0200)
All data must be passed in network byte order, else matching
won't work respectively kernel will reject the interval because
it thinks that start is after end

This is needed to allow use of 'ppp*' in interval sets with
concatenations.

Signed-off-by: Florian Westphal <fw@strlen.de>
src/netlink.c

index 240c937e3ac5c7f929af472e468a478b9c4cd716..89d864ed046aa2abf8800ade6980f64e19ec7e88 100644 (file)
@@ -259,6 +259,10 @@ static int netlink_gen_concat_data_expr(int end, const struct expr *i,
                        mpz_t v;
 
                        mpz_init_bitmask(v, i->len - i->prefix_len);
+
+                       if (i->byteorder == BYTEORDER_HOST_ENDIAN)
+                               mpz_switch_byteorder(v, i->len / BITS_PER_BYTE);
+
                        mpz_add(v, i->prefix->value, v);
                        count = netlink_export_pad(data, v, i);
                        mpz_clear(v);