]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
netfilter: conntrack: avoid gcc-10 zero-length-bounds warning
authorArnd Bergmann <arnd@arndb.de>
Thu, 30 Apr 2020 21:30:48 +0000 (23:30 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 20 May 2020 06:18:43 +0000 (08:18 +0200)
[ Upstream commit 2c407aca64977ede9b9f35158e919773cae2082f ]

gcc-10 warns around a suspicious access to an empty struct member:

net/netfilter/nf_conntrack_core.c: In function '__nf_conntrack_alloc':
net/netfilter/nf_conntrack_core.c:1522:9: warning: array subscript 0 is outside the bounds of an interior zero-length array 'u8[0]' {aka 'unsigned char[0]'} [-Wzero-length-bounds]
 1522 |  memset(&ct->__nfct_init_offset[0], 0,
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from net/netfilter/nf_conntrack_core.c:37:
include/net/netfilter/nf_conntrack.h:90:5: note: while referencing '__nfct_init_offset'
   90 |  u8 __nfct_init_offset[0];
      |     ^~~~~~~~~~~~~~~~~~

The code is correct but a bit unusual. Rework it slightly in a way that
does not trigger the warning, using an empty struct instead of an empty
array. There are probably more elegant ways to do this, but this is the
smallest change.

Fixes: c41884ce0562 ("netfilter: conntrack: avoid zeroing timer")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
include/net/netfilter/nf_conntrack.h
net/netfilter/nf_conntrack_core.c

index f45141bdbb8375d836672ae5dce405cd4c1e1cd2..ac4d70aeee1294648c2229d95597c22af8c04dc6 100644 (file)
@@ -85,7 +85,7 @@ struct nf_conn {
        struct hlist_node       nat_bysource;
 #endif
        /* all members below initialized via memset */
-       u8 __nfct_init_offset[0];
+       struct { } __nfct_init_offset;
 
        /* If we were expected by an expectation, this will be it */
        struct nf_conn *master;
index c6073d17c324430404775a76b9ef9d1bdbe174ab..ad1da6b2fb607c46edd6a05bccdac5e762ccd712 100644 (file)
@@ -1352,9 +1352,9 @@ __nf_conntrack_alloc(struct net *net,
        *(unsigned long *)(&ct->tuplehash[IP_CT_DIR_REPLY].hnnode.pprev) = hash;
        ct->status = 0;
        write_pnet(&ct->ct_net, net);
-       memset(&ct->__nfct_init_offset[0], 0,
+       memset(&ct->__nfct_init_offset, 0,
               offsetof(struct nf_conn, proto) -
-              offsetof(struct nf_conn, __nfct_init_offset[0]));
+              offsetof(struct nf_conn, __nfct_init_offset));
 
        nf_ct_zone_add(ct, zone);