]> git.baikalelectronics.ru Git - kernel.git/commit
netfilter: conntrack: support a fixed size of 128 distinct labels
authorFlorian Westphal <fw@strlen.de>
Thu, 21 Jul 2016 10:51:16 +0000 (12:51 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Fri, 22 Jul 2016 15:04:55 +0000 (17:04 +0200)
commite784fb8a0561b95c17bc9b881d20ad57c8d8f721
treeec71c09d3666e89f6502c161e607d00c93dd2d45
parent2825aea9a23eefc5e73123e3af2a28de23a58cb6
netfilter: conntrack: support a fixed size of 128 distinct labels

The conntrack label extension is currently variable-sized, e.g. if
only 2 labels are used by iptables rules then the labels->bits[] array
will only contain one element.

We track size of each label storage area in the 'words' member.

But in nftables and openvswitch we always have to ask for worst-case
since we don't know what bit will be used at configuration time.

As most arches are 64bit we need to allocate 24 bytes in this case:

struct nf_conn_labels {
    u8            words;   /*     0     1 */
    /* XXX 7 bytes hole, try to pack */
    long unsigned bits[2]; /*     8     24 */

Make bits a fixed size and drop the words member, it simplifies
the code and only increases memory requirements on x86 when
less than 64bit labels are required.

We still only allocate the extension if its needed.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/net/netfilter/nf_conntrack_labels.h
net/netfilter/nf_conntrack_labels.c
net/netfilter/nf_conntrack_netlink.c
net/netfilter/nft_ct.c
net/netfilter/xt_connlabel.c
net/openvswitch/conntrack.c