History

netfilter: bitwise: add NFTA_BITWISE_DATA attribute.

Add a new bitwise netlink attribute that will be used by shift operations to store the size of the shift. It is not used by boolean operations.

Jeremy Sowden committed 6 years ago

Commit 779f7251 parent ed991d42 files · +8 −0Browse files

Unified · Split

2 files
  1. include/uapi/linux/netfilter/nf_tables.h +3 −0
  2. net/netfilter/nft_bitwise.c +5 −0
include/uapi/linux/netfilter/nf_tables.h+3−0
@@ -503,6 +503,8 @@ enum nft_bitwise_ops { · 502 unmodified lines
503 * @NFTA_BITWISE_MASK: mask value (NLA_NESTED: nft_data_attributes)503 * @NFTA_BITWISE_MASK: mask value (NLA_NESTED: nft_data_attributes)
504 * @NFTA_BITWISE_XOR: xor value (NLA_NESTED: nft_data_attributes)504 * @NFTA_BITWISE_XOR: xor value (NLA_NESTED: nft_data_attributes)
505 * @NFTA_BITWISE_OP: type of operation (NLA_U32: nft_bitwise_ops)505 * @NFTA_BITWISE_OP: type of operation (NLA_U32: nft_bitwise_ops)
506 * @NFTA_BITWISE_DATA: argument for non-boolean operations
507 * (NLA_NESTED: nft_data_attributes)
506 *508 *
507 * The bitwise expression performs the following operation:509 * The bitwise expression performs the following operation:
508 *510 *
@@ -524,6 +526,7 @@ enum nft_bitwise_attributes { · 15 unmodified lines
524 NFTA_BITWISE_MASK,526 NFTA_BITWISE_MASK,
525 NFTA_BITWISE_XOR,527 NFTA_BITWISE_XOR,
526 NFTA_BITWISE_OP,528 NFTA_BITWISE_OP,
529 NFTA_BITWISE_DATA,
527 __NFTA_BITWISE_MAX530 __NFTA_BITWISE_MAX
528};531};
529#define NFTA_BITWISE_MAX (__NFTA_BITWISE_MAX - 1)532#define NFTA_BITWISE_MAX (__NFTA_BITWISE_MAX - 1)
net/netfilter/nft_bitwise.c+5−0
@@ -22,6 +22,7 @@ struct nft_bitwise { · 21 unmodified lines
22 u8 len;22 u8 len;
23 struct nft_data mask;23 struct nft_data mask;
24 struct nft_data xor;24 struct nft_data xor;
25 struct nft_data data;
25};26};
26 27
27static void nft_bitwise_eval_bool(u32 *dst, const u32 *src,28static void nft_bitwise_eval_bool(u32 *dst, const u32 *src,
@@ -54,6 +55,7 @@ static const struct nla_policy nft_bitwise_policy[NFTA_BITWISE_MAX + 1] = { · 26 unmodified lines
54 [NFTA_BITWISE_MASK] = { .type = NLA_NESTED },55 [NFTA_BITWISE_MASK] = { .type = NLA_NESTED },
55 [NFTA_BITWISE_XOR] = { .type = NLA_NESTED },56 [NFTA_BITWISE_XOR] = { .type = NLA_NESTED },
56 [NFTA_BITWISE_OP] = { .type = NLA_U32 },57 [NFTA_BITWISE_OP] = { .type = NLA_U32 },
58 [NFTA_BITWISE_DATA] = { .type = NLA_NESTED },
57};59};
58 60
59static int nft_bitwise_init_bool(struct nft_bitwise *priv,61static int nft_bitwise_init_bool(struct nft_bitwise *priv,
@@ -62,6 +64,9 @@ static int nft_bitwise_init_bool(struct nft_bitwise *priv, · 2 unmodified lines
62 struct nft_data_desc d1, d2;64 struct nft_data_desc d1, d2;
63 int err;65 int err;
64 66
67 if (tb[NFTA_BITWISE_DATA])
68 return -EINVAL;
69
65 if (!tb[NFTA_BITWISE_MASK] ||70 if (!tb[NFTA_BITWISE_MASK] ||
66 !tb[NFTA_BITWISE_XOR])71 !tb[NFTA_BITWISE_XOR])
67 return -EINVAL;72 return -EINVAL;