net: bareudp: avoid uninitialized variable warning
clang points out that building without IPv6 would lead to returning
an uninitialized variable if a packet with family!=AF_INET is
passed into bareudp_udp_encap_recv():
drivers/net/bareudp.c:139:6: error: variable 'err' is used uninitialized whenever 'if' condition is false [-Werror,-Wsometimes-uninitialized]
if (family == AF_INET)
^~~~~~~~~~~~~~~~~
drivers/net/bareudp.c:146:15: note: uninitialized use occurs here
if (unlikely(err)) {
^~~
include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
# define unlikely(x) __builtin_expect(!!(x), 0)
^
drivers/net/bareudp.c:139:2: note: remove the 'if' if its condition is always true
if (family == AF_INET)
^~~~~~~~~~~~~~~~~~~~~~
This cannot happen in practice, so change the condition in a way that
gcc sees the IPv4 case as unconditionally true here.
For consistency, change all the similar constructs in this file the
same way, using "if(IS_ENABLED())" instead of #if IS_ENABLED()".
Fixes: 571912c69f
("net: UDP tunnel encapsulation module for tunnelling different protocols like MPLS, IP, NSH etc.")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Nathan Chancellor <natechancellor@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8aef199481
commit
ee28755668
|
@ -136,25 +136,21 @@ static int bareudp_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
|
|||
oiph = skb_network_header(skb);
|
||||
skb_reset_network_header(skb);
|
||||
|
||||
if (family == AF_INET)
|
||||
if (!IS_ENABLED(CONFIG_IPV6) || family == AF_INET)
|
||||
err = IP_ECN_decapsulate(oiph, skb);
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
else
|
||||
err = IP6_ECN_decapsulate(oiph, skb);
|
||||
#endif
|
||||
|
||||
if (unlikely(err)) {
|
||||
if (log_ecn_error) {
|
||||
if (family == AF_INET)
|
||||
if (!IS_ENABLED(CONFIG_IPV6) || family == AF_INET)
|
||||
net_info_ratelimited("non-ECT from %pI4 "
|
||||
"with TOS=%#x\n",
|
||||
&((struct iphdr *)oiph)->saddr,
|
||||
((struct iphdr *)oiph)->tos);
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
else
|
||||
net_info_ratelimited("non-ECT from %pI6\n",
|
||||
&((struct ipv6hdr *)oiph)->saddr);
|
||||
#endif
|
||||
}
|
||||
if (err > 1) {
|
||||
++bareudp->dev->stats.rx_frame_errors;
|
||||
|
@ -350,7 +346,6 @@ free_dst:
|
|||
return err;
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
static int bareudp6_xmit_skb(struct sk_buff *skb, struct net_device *dev,
|
||||
struct bareudp_dev *bareudp,
|
||||
const struct ip_tunnel_info *info)
|
||||
|
@ -411,7 +406,6 @@ free_dst:
|
|||
dst_release(dst);
|
||||
return err;
|
||||
}
|
||||
#endif
|
||||
|
||||
static netdev_tx_t bareudp_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
{
|
||||
|
@ -435,11 +429,9 @@ static netdev_tx_t bareudp_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
}
|
||||
|
||||
rcu_read_lock();
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
if (info->mode & IP_TUNNEL_INFO_IPV6)
|
||||
if (IS_ENABLED(CONFIG_IPV6) && info->mode & IP_TUNNEL_INFO_IPV6)
|
||||
err = bareudp6_xmit_skb(skb, dev, bareudp, info);
|
||||
else
|
||||
#endif
|
||||
err = bareudp_xmit_skb(skb, dev, bareudp, info);
|
||||
|
||||
rcu_read_unlock();
|
||||
|
@ -467,7 +459,7 @@ static int bareudp_fill_metadata_dst(struct net_device *dev,
|
|||
|
||||
use_cache = ip_tunnel_dst_cache_usable(skb, info);
|
||||
|
||||
if (ip_tunnel_info_af(info) == AF_INET) {
|
||||
if (!IS_ENABLED(CONFIG_IPV6) || ip_tunnel_info_af(info) == AF_INET) {
|
||||
struct rtable *rt;
|
||||
__be32 saddr;
|
||||
|
||||
|
@ -478,7 +470,6 @@ static int bareudp_fill_metadata_dst(struct net_device *dev,
|
|||
|
||||
ip_rt_put(rt);
|
||||
info->key.u.ipv4.src = saddr;
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
} else if (ip_tunnel_info_af(info) == AF_INET6) {
|
||||
struct dst_entry *dst;
|
||||
struct in6_addr saddr;
|
||||
|
@ -492,7 +483,6 @@ static int bareudp_fill_metadata_dst(struct net_device *dev,
|
|||
|
||||
dst_release(dst);
|
||||
info->key.u.ipv6.src = saddr;
|
||||
#endif
|
||||
} else {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
|
|
@ -143,14 +143,12 @@ void udp_tunnel_xmit_skb(struct rtable *rt, struct sock *sk, struct sk_buff *skb
|
|||
__be16 df, __be16 src_port, __be16 dst_port,
|
||||
bool xnet, bool nocheck);
|
||||
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
int udp_tunnel6_xmit_skb(struct dst_entry *dst, struct sock *sk,
|
||||
struct sk_buff *skb,
|
||||
struct net_device *dev, struct in6_addr *saddr,
|
||||
struct in6_addr *daddr,
|
||||
__u8 prio, __u8 ttl, __be32 label,
|
||||
__be16 src_port, __be16 dst_port, bool nocheck);
|
||||
#endif
|
||||
|
||||
void udp_tunnel_sock_release(struct socket *sock);
|
||||
|
||||
|
|
Loading…
Reference in New Issue