diff options
author | Florian Westphal <fw@strlen.de> | 2014-02-18 09:25:32 -0500 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2014-02-19 05:41:25 -0500 |
commit | d2bf2f34cc1a8304a5dab0d42e7a2ae58ede94cd (patch) | |
tree | 886fd9d2a812e9c6ecb5c90a08abf1a7fb1e6b56 /include | |
parent | 2ba436fc02f95446bfcb7138db44920ab63deb61 (diff) |
netfilter: nft_ct: labels get support
This also adds NF_CT_LABELS_MAX_SIZE so it can be re-used
as BUILD_BUG_ON in nft_ct.
At this time, nft doesn't yet support writing to the label area;
when this changes the label->words handling needs to be moved
out of xt_connlabel.c into nf_conntrack_labels.c.
Also removes a useless run-time check: words cannot grow beyond
4 (32 bit) or 2 (64bit) since xt_connlabel enforces a maximum of
128 labels.
Signed-off-by: Florian Westphal <fw@strlen.de>
Acked-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/net/netfilter/nf_conntrack_labels.h | 4 | ||||
-rw-r--r-- | include/uapi/linux/netfilter/nf_tables.h | 1 |
2 files changed, 4 insertions, 1 deletions
diff --git a/include/net/netfilter/nf_conntrack_labels.h b/include/net/netfilter/nf_conntrack_labels.h index c985695283b3..dec6336bf850 100644 --- a/include/net/netfilter/nf_conntrack_labels.h +++ b/include/net/netfilter/nf_conntrack_labels.h | |||
@@ -7,6 +7,8 @@ | |||
7 | 7 | ||
8 | #include <uapi/linux/netfilter/xt_connlabel.h> | 8 | #include <uapi/linux/netfilter/xt_connlabel.h> |
9 | 9 | ||
10 | #define NF_CT_LABELS_MAX_SIZE ((XT_CONNLABEL_MAXBIT + 1) / BITS_PER_BYTE) | ||
11 | |||
10 | struct nf_conn_labels { | 12 | struct nf_conn_labels { |
11 | u8 words; | 13 | u8 words; |
12 | unsigned long bits[]; | 14 | unsigned long bits[]; |
@@ -29,7 +31,7 @@ static inline struct nf_conn_labels *nf_ct_labels_ext_add(struct nf_conn *ct) | |||
29 | u8 words; | 31 | u8 words; |
30 | 32 | ||
31 | words = ACCESS_ONCE(net->ct.label_words); | 33 | words = ACCESS_ONCE(net->ct.label_words); |
32 | if (words == 0 || WARN_ON_ONCE(words > 8)) | 34 | if (words == 0) |
33 | return NULL; | 35 | return NULL; |
34 | 36 | ||
35 | cl_ext = nf_ct_ext_add_length(ct, NF_CT_EXT_LABELS, | 37 | cl_ext = nf_ct_ext_add_length(ct, NF_CT_EXT_LABELS, |
diff --git a/include/uapi/linux/netfilter/nf_tables.h b/include/uapi/linux/netfilter/nf_tables.h index 83c985a6170b..c84c452c62a7 100644 --- a/include/uapi/linux/netfilter/nf_tables.h +++ b/include/uapi/linux/netfilter/nf_tables.h | |||
@@ -601,6 +601,7 @@ enum nft_ct_keys { | |||
601 | NFT_CT_PROTOCOL, | 601 | NFT_CT_PROTOCOL, |
602 | NFT_CT_PROTO_SRC, | 602 | NFT_CT_PROTO_SRC, |
603 | NFT_CT_PROTO_DST, | 603 | NFT_CT_PROTO_DST, |
604 | NFT_CT_LABELS, | ||
604 | }; | 605 | }; |
605 | 606 | ||
606 | /** | 607 | /** |