net: ethernet: rmnet: Restructure if checks to avoid uninitialized warning
Clang warns that proto in rmnet_map_v5_checksum_uplink_packet() might be
used uninitialized:
drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c:283:14: warning:
variable 'proto' is used uninitialized whenever 'if' condition is false
[-Wsometimes-uninitialized]
} else if (skb->protocol == htons(ETH_P_IPV6)) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c:295:36: note:
uninitialized use occurs here
check = rmnet_map_get_csum_field(proto, trans);
^~~~~
drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c:283:10: note:
remove the 'if' if its condition is always true
} else if (skb->protocol == htons(ETH_P_IPV6)) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c:270:11: note:
initialize the variable 'proto' to silence this warning
u8 proto;
^
= '\0'
1 warning generated.
This is technically a false positive because there is an if statement
above this one that checks skb->protocol for not being either
ETH_P_IP{,V6}. However, it is more obvious to sink that into the if
statement as an else branch, which makes the code clearer and fixes the
warning.
At the same time, move the "IS_ENABLED(CONFIG_IPV6)" into the else if
condition so that the else branch of the preprocessor conditional can
be shared, since there is no build failure with CONFIG_IPV6 disabled.
Fixes: b6e5d27e32
("net: ethernet: rmnet: Add support for MAPv5 egress packets")
Link: https://github.com/ClangBuiltLinux/linux/issues/1390
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
819fb78f69
Коммит
118de61067
|
@ -269,27 +269,20 @@ static void rmnet_map_v5_checksum_uplink_packet(struct sk_buff *skb,
|
|||
void *trans;
|
||||
u8 proto;
|
||||
|
||||
if (skb->protocol != htons(ETH_P_IP) &&
|
||||
skb->protocol != htons(ETH_P_IPV6)) {
|
||||
priv->stats.csum_err_invalid_ip_version++;
|
||||
goto sw_csum;
|
||||
}
|
||||
|
||||
if (skb->protocol == htons(ETH_P_IP)) {
|
||||
u16 ip_len = ((struct iphdr *)iph)->ihl * 4;
|
||||
|
||||
proto = ((struct iphdr *)iph)->protocol;
|
||||
trans = iph + ip_len;
|
||||
} else if (skb->protocol == htons(ETH_P_IPV6)) {
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
} else if (IS_ENABLED(CONFIG_IPV6) &&
|
||||
skb->protocol == htons(ETH_P_IPV6)) {
|
||||
u16 ip_len = sizeof(struct ipv6hdr);
|
||||
|
||||
proto = ((struct ipv6hdr *)iph)->nexthdr;
|
||||
trans = iph + ip_len;
|
||||
#else
|
||||
} else {
|
||||
priv->stats.csum_err_invalid_ip_version++;
|
||||
goto sw_csum;
|
||||
#endif /* CONFIG_IPV6 */
|
||||
}
|
||||
|
||||
check = rmnet_map_get_csum_field(proto, trans);
|
||||
|
|
Загрузка…
Ссылка в новой задаче