Patch "ip/ip6_gre: Fix non-point-to-point tunnel not generating IPv6 link local address" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    ip/ip6_gre: Fix non-point-to-point tunnel not generating IPv6 link local address

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     ip-ip6_gre-fix-non-point-to-point-tunnel-not-generat.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 80c5276d45492d51962b3d36af335cf7819e05b1
Author: Thomas Winter <Thomas.Winter@xxxxxxxxxxxxxxxxxxx>
Date:   Tue Jan 31 16:46:46 2023 +1300

    ip/ip6_gre: Fix non-point-to-point tunnel not generating IPv6 link local address
    
    [ Upstream commit 30e2291f61f93f7132c060190f8360df52644ec1 ]
    
    We recently found that our non-point-to-point tunnels were not
    generating any IPv6 link local address and instead generating an
    IPv6 compat address, breaking IPv6 communication on the tunnel.
    
    Previously, addrconf_gre_config always would call addrconf_addr_gen
    and generate a EUI64 link local address for the tunnel.
    Then commit e5dd729460ca changed the code path so that add_v4_addrs
    is called but this only generates a compat IPv6 address for
    non-point-to-point tunnels.
    
    I assume the compat address is specifically for SIT tunnels so
    have kept that only for SIT - GRE tunnels now always generate link
    local addresses.
    
    Fixes: e5dd729460ca ("ip/ip6_gre: use the same logic as SIT interfaces when computing v6LL address")
    Signed-off-by: Thomas Winter <Thomas.Winter@xxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index eaecaf2ffe00..e6c7edcf6834 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -3127,17 +3127,17 @@ static void add_v4_addrs(struct inet6_dev *idev)
 		offset = sizeof(struct in6_addr) - 4;
 	memcpy(&addr.s6_addr32[3], idev->dev->dev_addr + offset, 4);
 
-	if (idev->dev->flags&IFF_POINTOPOINT) {
+	if (!(idev->dev->flags & IFF_POINTOPOINT) && idev->dev->type == ARPHRD_SIT) {
+		scope = IPV6_ADDR_COMPATv4;
+		plen = 96;
+		pflags |= RTF_NONEXTHOP;
+	} else {
 		if (idev->cnf.addr_gen_mode == IN6_ADDR_GEN_MODE_NONE)
 			return;
 
 		addr.s6_addr32[0] = htonl(0xfe800000);
 		scope = IFA_LINK;
 		plen = 64;
-	} else {
-		scope = IPV6_ADDR_COMPATv4;
-		plen = 96;
-		pflags |= RTF_NONEXTHOP;
 	}
 
 	if (addr.s6_addr32[3]) {



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux