| From foo@baz Thu Mar 8 10:22:29 PST 2018 |
| From: Arnd Bergmann <arnd@arndb.de> |
| Date: Thu, 22 Feb 2018 16:55:34 +0100 |
| Subject: ipv6 sit: work around bogus gcc-8 -Wrestrict warning |
| |
| From: Arnd Bergmann <arnd@arndb.de> |
| |
| |
| [ Upstream commit ca79bec237f5809a7c3c59bd41cd0880aa889966 ] |
| |
| gcc-8 has a new warning that detects overlapping input and output arguments |
| in memcpy(). It triggers for sit_init_net() calling ipip6_tunnel_clone_6rd(), |
| which is actually correct: |
| |
| net/ipv6/sit.c: In function 'sit_init_net': |
| net/ipv6/sit.c:192:3: error: 'memcpy' source argument is the same as destination [-Werror=restrict] |
| |
| The problem here is that the logic detecting the memcpy() arguments finds them |
| to be the same, but the conditional that tests for the input and output of |
| ipip6_tunnel_clone_6rd() to be identical is not a compile-time constant. |
| |
| We know that netdev_priv(t->dev) is the same as t for a tunnel device, |
| and comparing "dev" directly here lets the compiler figure out as well |
| that 'dev == sitn->fb_tunnel_dev' when called from sit_init_net(), so |
| it no longer warns. |
| |
| This code is old, so Cc stable to make sure that we don't get the warning |
| for older kernels built with new gcc. |
| |
| Cc: Martin Sebor <msebor@gmail.com> |
| Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83456 |
| Signed-off-by: Arnd Bergmann <arnd@arndb.de> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/ipv6/sit.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/net/ipv6/sit.c |
| +++ b/net/ipv6/sit.c |
| @@ -176,7 +176,7 @@ static void ipip6_tunnel_clone_6rd(struc |
| #ifdef CONFIG_IPV6_SIT_6RD |
| struct ip_tunnel *t = netdev_priv(dev); |
| |
| - if (t->dev == sitn->fb_tunnel_dev) { |
| + if (dev == sitn->fb_tunnel_dev) { |
| ipv6_addr_set(&t->ip6rd.prefix, htonl(0x20020000), 0, 0, 0); |
| t->ip6rd.relay_prefix = 0; |
| t->ip6rd.prefixlen = 16; |