summaryrefslogtreecommitdiff
path: root/include/net
diff options
context:
space:
mode:
authorYi-Hung Wei <yihung.wei@gmail.com>2020-11-10 16:16:40 -0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-11-24 13:27:21 +0100
commit901e04cd478133ba6458fecbd3b232b528d26f3b (patch)
tree8a64f9f7e5a8adb3717bf4bc7de427206a645e05 /include/net
parentc4d54937576e5b9cdedb84e371eedf1f0ba67c0b (diff)
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@gmail.com/T/#u Fixes: 256c87c17c53 ("net: check tunnel option type in tunnel flags") Signed-off-by: Yi-Hung Wei <yihung.wei@gmail.com> Link: https://lore.kernel.org/r/1605053800-74072-1-git-send-email-yihung.wei@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'include/net')
-rw-r--r--include/net/ip_tunnels.h7
1 files changed, 4 insertions, 3 deletions
diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h
index e11423530d64..f8873c4eb003 100644
--- a/include/net/ip_tunnels.h
+++ b/include/net/ip_tunnels.h
@@ -489,9 +489,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)
@@ -537,7 +539,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 */