Patch "ip_tunnels: Set tunnel option flag when tunnel metadata is present" has been added to the 5.9-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_tunnels: Set tunnel option flag when tunnel metadata is present

to the 5.9-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_tunnels-set-tunnel-option-flag-when-tunnel-metada.patch
and it can be found in the queue-5.9 subdirectory.

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



commit 7e414dc6c2e30a4a2aa774793cba015a3c2ce4b7
Author: Yi-Hung Wei <yihung.wei@xxxxxxxxx>
Date:   Tue Nov 10 16:16:40 2020 -0800

    ip_tunnels: Set tunnel option flag when tunnel metadata is present
    
    [ Upstream commit 9c2e14b48119b39446031d29d994044ae958d8fc ]
    
    Currently, we may set the tunnel option flag when the size of metadata
    is zero.  For example, we set TUNNEL_GENEVE_OPT in the receive function
    no matter the geneve option is present or not.  As this may result in
    issues on the tunnel flags consumers, this patch fixes the issue.
    
    Related discussion:
    * https://lore.kernel.org/netdev/1604448694-19351-1-git-send-email-yihung.wei@xxxxxxxxx/T/#u
    
    Fixes: 256c87c17c53 ("net: check tunnel option type in tunnel flags")
    Signed-off-by: Yi-Hung Wei <yihung.wei@xxxxxxxxx>
    Link: https://lore.kernel.org/r/1605053800-74072-1-git-send-email-yihung.wei@xxxxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
index 974a244f45ba0..67c86ebfa7da2 100644
--- a/drivers/net/geneve.c
+++ b/drivers/net/geneve.c
@@ -225,8 +225,7 @@ static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs,
 	if (ip_tunnel_collect_metadata() || gs->collect_md) {
 		__be16 flags;
 
-		flags = TUNNEL_KEY | TUNNEL_GENEVE_OPT |
-			(gnvh->oam ? TUNNEL_OAM : 0) |
+		flags = TUNNEL_KEY | (gnvh->oam ? TUNNEL_OAM : 0) |
 			(gnvh->critical ? TUNNEL_CRIT_OPT : 0);
 
 		tun_dst = udp_tun_rx_dst(skb, geneve_get_sk_family(gs), flags,
diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h
index 02ccd32542d0a..61620677b0347 100644
--- a/include/net/ip_tunnels.h
+++ b/include/net/ip_tunnels.h
@@ -478,9 +478,11 @@ static inline void ip_tunnel_info_opts_set(struct ip_tunnel_info *info,
 					   const void *from, int len,
 					   __be16 flags)
 {
-	memcpy(ip_tunnel_info_opts(info), from, len);
 	info->options_len = len;
-	info->key.tun_flags |= flags;
+	if (len > 0) {
+		memcpy(ip_tunnel_info_opts(info), from, len);
+		info->key.tun_flags |= flags;
+	}
 }
 
 static inline struct ip_tunnel_info *lwt_tun_info(struct lwtunnel_state *lwtstate)
@@ -526,7 +528,6 @@ static inline void ip_tunnel_info_opts_set(struct ip_tunnel_info *info,
 					   __be16 flags)
 {
 	info->options_len = 0;
-	info->key.tun_flags |= flags;
 }
 
 #endif /* CONFIG_INET */



[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