[PATCH net-next] net: ip_tunnel: clean up endianness conversions

Subsystems: networking [general], networking [ipv4/ipv6], the rest

STALE2041d LANDED

Landed in mainline as fda4fde297f8 on 2021-01-09.

2 messages, 2 authors, 2021-01-09 · open the first message on its own page

[PATCH net-next] net: ip_tunnel: clean up endianness conversions

From: Julian Wiedmann <hidden>
Date: 2021-01-07 14:41:31

sparse complains about some harmless endianness issues:
net/ipv4/ip_tunnel_core.c:225:43: warning: cast to restricted __be16
net/ipv4/ip_tunnel_core.c:225:43: warning: incorrect type in initializer (different base types)
net/ipv4/ip_tunnel_core.c:225:43:    expected restricted __be16 [usertype] mtu
net/ipv4/ip_tunnel_core.c:225:43:    got unsigned short [usertype]
iptunnel_pmtud_build_icmp() uses the wrong flavour of byte-order conversion
when storing the MTU into the ICMPv4 packet. Use htons(), just like
iptunnel_pmtud_build_icmpv6() does.
net/ipv4/ip_tunnel_core.c:248:35: warning: cast from restricted __be16
net/ipv4/ip_tunnel_core.c:248:35: warning: incorrect type in argument 3 (different base types)
net/ipv4/ip_tunnel_core.c:248:35:    expected unsigned short type
net/ipv4/ip_tunnel_core.c:248:35:    got restricted __be16 [usertype]
net/ipv4/ip_tunnel_core.c:341:35: warning: cast from restricted __be16
net/ipv4/ip_tunnel_core.c:341:35: warning: incorrect type in argument 3 (different base types)
net/ipv4/ip_tunnel_core.c:341:35:    expected unsigned short type
net/ipv4/ip_tunnel_core.c:341:35:    got restricted __be16 [usertype]
eth_header() wants the Ethertype in host-order, use the correct flavour of
byte-order conversion.
net/ipv4/ip_tunnel_core.c:600:45: warning: restricted __be16 degrades to integer
net/ipv4/ip_tunnel_core.c:609:30: warning: incorrect type in assignment (different base types)
net/ipv4/ip_tunnel_core.c:609:30:    expected int type
net/ipv4/ip_tunnel_core.c:609:30:    got restricted __be16 [usertype]
net/ipv4/ip_tunnel_core.c:619:30: warning: incorrect type in assignment (different base types)
net/ipv4/ip_tunnel_core.c:619:30:    expected int type
net/ipv4/ip_tunnel_core.c:619:30:    got restricted __be16 [usertype]
net/ipv4/ip_tunnel_core.c:629:30: warning: incorrect type in assignment (different base types)
net/ipv4/ip_tunnel_core.c:629:30:    expected int type
net/ipv4/ip_tunnel_core.c:629:30:    got restricted __be16 [usertype]
The TUNNEL_* types are big-endian, so adjust the type of the local
variable in ip_tun_parse_opts().

Cc: Alexey Kuznetsov <redacted>
Cc: Hideaki YOSHIFUJI <redacted>
Signed-off-by: Julian Wiedmann <redacted>
---
 net/ipv4/ip_tunnel_core.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/net/ipv4/ip_tunnel_core.c b/net/ipv4/ip_tunnel_core.c
index 7ca338fbe8ba..6b2dc7b2b612 100644
--- a/net/ipv4/ip_tunnel_core.c
+++ b/net/ipv4/ip_tunnel_core.c
@@ -222,7 +222,7 @@ static int iptunnel_pmtud_build_icmp(struct sk_buff *skb, int mtu)
 		.code			= ICMP_FRAG_NEEDED,
 		.checksum		= 0,
 		.un.frag.__unused	= 0,
-		.un.frag.mtu		= ntohs(mtu),
+		.un.frag.mtu		= htons(mtu),
 	};
 	icmph->checksum = ip_compute_csum(icmph, len);
 	skb_reset_transport_header(skb);
@@ -245,7 +245,7 @@ static int iptunnel_pmtud_build_icmp(struct sk_buff *skb, int mtu)
 
 	skb->ip_summed = CHECKSUM_NONE;
 
-	eth_header(skb, skb->dev, htons(eh.h_proto), eh.h_source, eh.h_dest, 0);
+	eth_header(skb, skb->dev, ntohs(eh.h_proto), eh.h_source, eh.h_dest, 0);
 	skb_reset_mac_header(skb);
 
 	return skb->len;
@@ -338,7 +338,7 @@ static int iptunnel_pmtud_build_icmpv6(struct sk_buff *skb, int mtu)
 
 	skb->ip_summed = CHECKSUM_NONE;
 
-	eth_header(skb, skb->dev, htons(eh.h_proto), eh.h_source, eh.h_dest, 0);
+	eth_header(skb, skb->dev, ntohs(eh.h_proto), eh.h_source, eh.h_dest, 0);
 	skb_reset_mac_header(skb);
 
 	return skb->len;
@@ -583,8 +583,9 @@ static int ip_tun_parse_opts_erspan(struct nlattr *attr,
 static int ip_tun_parse_opts(struct nlattr *attr, struct ip_tunnel_info *info,
 			     struct netlink_ext_ack *extack)
 {
-	int err, rem, opt_len, opts_len = 0, type = 0;
+	int err, rem, opt_len, opts_len = 0;
 	struct nlattr *nla;
+	__be16 type = 0;
 
 	if (!attr)
 		return 0;
-- 
2.17.1

Re: [PATCH net-next] net: ip_tunnel: clean up endianness conversions

From: patchwork-bot+netdevbpf@kernel.org
Date: 2021-01-09 03:31:23

Hello:

This patch was applied to netdev/net-next.git (refs/heads/master):

On Thu,  7 Jan 2021 15:40:08 +0100 you wrote:
sparse complains about some harmless endianness issues:
quoted
net/ipv4/ip_tunnel_core.c:225:43: warning: cast to restricted __be16
net/ipv4/ip_tunnel_core.c:225:43: warning: incorrect type in initializer (different base types)
net/ipv4/ip_tunnel_core.c:225:43:    expected restricted __be16 [usertype] mtu
net/ipv4/ip_tunnel_core.c:225:43:    got unsigned short [usertype]
[...]
Here is the summary with links:
  - [net-next] net: ip_tunnel: clean up endianness conversions
    https://git.kernel.org/netdev/net-next/c/fda4fde297f8

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help