summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2013-09-20 16:01:33 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2013-09-23 20:27:04 +0200
commite391b72b611403d184bbb26e3d076d543c7ea7c6 (patch)
treefac59463aa6be50714b49c29ea4e9a6dff7701ac
parent968dff13e3bf0c7c4c55aeec6e62d184d9807410 (diff)
meta: iif/oifname should be host byte order
src/nft add rule filter output meta oifname eth0 doesn't work on x86. Problem is that nft declares these as BYTEORDER_INVALID, but when converting the string mpz_import_data treats INVALID like BIG_ENDIAN. [ cmp eq reg 1 0x00000000 0x00000000 0x65000000 0x00306874 ] as kernel nft_cmp_eval basically boils down to memcmp(reg, skb->dev->name, sizeof(reg) comparision fails. with patch: [ cmp eq reg 1 0x30687465 0x00000000 0x00000000 0x00000000 ] Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r--src/ct.c2
-rw-r--r--src/datatype.c4
-rw-r--r--src/meta.c4
3 files changed, 5 insertions, 5 deletions
diff --git a/src/ct.c b/src/ct.c
index 1baefed8..e5ca593c 100644
--- a/src/ct.c
+++ b/src/ct.c
@@ -110,7 +110,7 @@ static const struct ct_template ct_templates[] = {
BYTEORDER_HOST_ENDIAN,
4 * BITS_PER_BYTE),
[NFT_CT_HELPER] = CT_TEMPLATE("helper", &string_type,
- BYTEORDER_INVALID, 0),
+ BYTEORDER_HOST_ENDIAN, 0),
[NFT_CT_L3PROTOCOL] = CT_TEMPLATE("l3proto", &invalid_type,
BYTEORDER_INVALID,
BITS_PER_BYTE),
diff --git a/src/datatype.c b/src/datatype.c
index c4fc131d..4c5a70f2 100644
--- a/src/datatype.c
+++ b/src/datatype.c
@@ -258,7 +258,7 @@ static void string_type_print(const struct expr *expr)
unsigned int len = div_round_up(expr->len, BITS_PER_BYTE);
char data[len];
- mpz_export_data(data, expr->value, BYTEORDER_BIG_ENDIAN, len);
+ mpz_export_data(data, expr->value, BYTEORDER_HOST_ENDIAN, len);
printf("\"%s\"", data);
}
@@ -266,7 +266,7 @@ static struct error_record *string_type_parse(const struct expr *sym,
struct expr **res)
{
*res = constant_expr_alloc(&sym->location, &string_type,
- BYTEORDER_INVALID,
+ BYTEORDER_HOST_ENDIAN,
(strlen(sym->identifier) + 1) * BITS_PER_BYTE,
sym->identifier);
return NULL;
diff --git a/src/meta.c b/src/meta.c
index 17322afd..9606a44b 100644
--- a/src/meta.c
+++ b/src/meta.c
@@ -295,14 +295,14 @@ static const struct meta_template meta_templates[] = {
4 * 8, BYTEORDER_HOST_ENDIAN),
[NFT_META_IIFNAME] = META_TEMPLATE("iifname", &string_type,
IFNAMSIZ * BITS_PER_BYTE,
- BYTEORDER_INVALID),
+ BYTEORDER_HOST_ENDIAN),
[NFT_META_IIFTYPE] = META_TEMPLATE("iiftype", &arphrd_type,
2 * 8, BYTEORDER_HOST_ENDIAN),
[NFT_META_OIF] = META_TEMPLATE("oif", &ifindex_type,
4 * 8, BYTEORDER_HOST_ENDIAN),
[NFT_META_OIFNAME] = META_TEMPLATE("oifname", &string_type,
IFNAMSIZ * BITS_PER_BYTE,
- BYTEORDER_INVALID),
+ BYTEORDER_HOST_ENDIAN),
[NFT_META_OIFTYPE] = META_TEMPLATE("oiftype", &arphrd_type,
2 * 8, BYTEORDER_HOST_ENDIAN),
[NFT_META_SKUID] = META_TEMPLATE("skuid", &uid_type,