Re: [PATCH net-next] netlink: optimize err assignment

2017-11-20 Thread kbuild test robot
Hi yuan,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on net-next/master]

url:
https://github.com/0day-ci/linux/commits/yuan-linyu/netlink-optimize-err-assignment/20171121-100409
config: i386-randconfig-x001-201747 (attached as .config)
compiler: gcc-6 (Debian 6.4.0-9) 6.4.0 20171026
reproduce:
# save the attached .config to linux build tree
make ARCH=i386 

Note: it may well be a FALSE warning. FWIW you are at least aware of it now.
http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings

All warnings (new ones prefixed by >>):

   net/netlink/af_netlink.c: In function 'netlink_setsockopt':
>> net/netlink/af_netlink.c:1614:19: warning: 'val' may be used uninitialized 
>> in this function [-Wmaybe-uninitialized]
  if (!val || val - 1 >= nlk->ngroups)
  ^~~

vim +/val +1614 net/netlink/af_netlink.c

84659eb52 Johannes Berg  2007-07-18  1584  
9a4595bc7 Patrick McHardy2005-08-15  1585  static int 
netlink_setsockopt(struct socket *sock, int level, int optname,
b7058842c David S. Miller2009-09-30  1586 char 
__user *optval, unsigned int optlen)
9a4595bc7 Patrick McHardy2005-08-15  1587  {
9a4595bc7 Patrick McHardy2005-08-15  1588   struct sock *sk = sock->sk;
9a4595bc7 Patrick McHardy2005-08-15  1589   struct netlink_sock *nlk = 
nlk_sk(sk);
f3b56fc83 yuan linyu 2017-11-19  1590   unsigned int val;
f3b56fc83 yuan linyu 2017-11-19  1591   int err = 0;
9a4595bc7 Patrick McHardy2005-08-15  1592  
9a4595bc7 Patrick McHardy2005-08-15  1593   if (level != SOL_NETLINK)
9a4595bc7 Patrick McHardy2005-08-15  1594   return -ENOPROTOOPT;
9a4595bc7 Patrick McHardy2005-08-15  1595  
d1b4c689d Florian Westphal   2016-02-18  1596   if (optlen >= sizeof(int) &&
eb4965344 Johannes Berg  2007-07-18  1597   get_user(val, (unsigned int 
__user *)optval))
9a4595bc7 Patrick McHardy2005-08-15  1598   return -EFAULT;
9a4595bc7 Patrick McHardy2005-08-15  1599  
9a4595bc7 Patrick McHardy2005-08-15  1600   switch (optname) {
9a4595bc7 Patrick McHardy2005-08-15  1601   case NETLINK_PKTINFO:
9a4595bc7 Patrick McHardy2005-08-15  1602   if (val)
cc3a572fe Nicolas Dichtel2015-05-07  1603   nlk->flags |= 
NETLINK_F_RECV_PKTINFO;
9a4595bc7 Patrick McHardy2005-08-15  1604   else
cc3a572fe Nicolas Dichtel2015-05-07  1605   nlk->flags &= 
~NETLINK_F_RECV_PKTINFO;
9a4595bc7 Patrick McHardy2005-08-15  1606   break;
9a4595bc7 Patrick McHardy2005-08-15  1607   case NETLINK_ADD_MEMBERSHIP:
9a4595bc7 Patrick McHardy2005-08-15  1608   case NETLINK_DROP_MEMBERSHIP: {
5187cd055 Eric W. Biederman  2014-04-23  1609   if 
(!netlink_allowed(sock, NL_CFG_F_NONROOT_RECV))
9a4595bc7 Patrick McHardy2005-08-15  1610   return -EPERM;
b4ff4f041 Johannes Berg  2007-07-18  1611   err = 
netlink_realloc_groups(sk);
513c25000 Patrick McHardy2005-09-06  1612   if (err)
513c25000 Patrick McHardy2005-09-06  1613   return err;
9a4595bc7 Patrick McHardy2005-08-15 @1614   if (!val || val - 1 >= 
nlk->ngroups)
9a4595bc7 Patrick McHardy2005-08-15  1615   return -EINVAL;
7774d5e03 Richard Guy Briggs 2014-04-22  1616   if (optname == 
NETLINK_ADD_MEMBERSHIP && nlk->netlink_bind) {
023e2cfa3 Johannes Berg  2014-12-23  1617   err = 
nlk->netlink_bind(sock_net(sk), val);
4f5209005 Richard Guy Briggs 2014-04-22  1618   if (err)
4f5209005 Richard Guy Briggs 2014-04-22  1619   return 
err;
4f5209005 Richard Guy Briggs 2014-04-22  1620   }
9a4595bc7 Patrick McHardy2005-08-15  1621   netlink_table_grab();
84659eb52 Johannes Berg  2007-07-18  1622   
netlink_update_socket_mc(nlk, val,
84659eb52 Johannes Berg  2007-07-18  1623   
 optname == NETLINK_ADD_MEMBERSHIP);
9a4595bc7 Patrick McHardy2005-08-15  1624   netlink_table_ungrab();
7774d5e03 Richard Guy Briggs 2014-04-22  1625   if (optname == 
NETLINK_DROP_MEMBERSHIP && nlk->netlink_unbind)
023e2cfa3 Johannes Berg  2014-12-23  1626   
nlk->netlink_unbind(sock_net(sk), val);
9a4595bc7 Patrick McHardy2005-08-15  1627   break;
9a4595bc7 Patrick McHardy2005-08-15  1628   }
be0c22a46 Pablo Neira Ayuso  2009-02-18  1629   case NETLINK_BROADCAST_ERROR:
be0c22a46 Pablo Neira Ayuso  2009-02-18  1630   if (val)
cc3a572fe Nicolas Dichtel2015-05-07  1631   nlk->flags |= 
NETLINK_F_BROADCAST_SEND_ERROR;
be0c22a46 Pablo Neira Ayuso  2009-02-18  1632   else
cc3a572fe Nicolas Dichtel2015-05-07  1633   nlk->flags &= 
~NETLINK_F_BROADCAST_SEND_ERROR;
be0c22a46 Pablo Neira Ayuso  2009-02-18  1634   break;
38938bfe3 Pablo 

[PATCH net-next] netlink: optimize err assignment

2017-11-19 Thread yuan linyu
From: yuan linyu 

Signed-off-by: yuan linyu 
---
 net/netlink/af_netlink.c | 54 +---
 1 file changed, 23 insertions(+), 31 deletions(-)

diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
index b9e0ee4..37ce0d3 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -533,14 +533,16 @@ static int netlink_insert(struct sock *sk, u32 portid)
 
lock_sock(sk);
 
-   err = nlk_sk(sk)->portid == portid ? 0 : -EBUSY;
-   if (nlk_sk(sk)->bound)
+   if (nlk_sk(sk)->bound) {
+   err = nlk_sk(sk)->portid == portid ? 0 : -EBUSY;
goto err;
+   }
 
-   err = -ENOMEM;
if (BITS_PER_LONG > 32 &&
-   unlikely(atomic_read(>hash.nelems) >= UINT_MAX))
+   unlikely(atomic_read(>hash.nelems) >= UINT_MAX)) {
+   err = -ENOMEM;
goto err;
+   }
 
nlk_sk(sk)->portid = portid;
sock_hold(sk);
@@ -1585,8 +1587,8 @@ static int netlink_setsockopt(struct socket *sock, int 
level, int optname,
 {
struct sock *sk = sock->sk;
struct netlink_sock *nlk = nlk_sk(sk);
-   unsigned int val = 0;
-   int err;
+   unsigned int val;
+   int err = 0;
 
if (level != SOL_NETLINK)
return -ENOPROTOOPT;
@@ -1601,7 +1603,6 @@ static int netlink_setsockopt(struct socket *sock, int 
level, int optname,
nlk->flags |= NETLINK_F_RECV_PKTINFO;
else
nlk->flags &= ~NETLINK_F_RECV_PKTINFO;
-   err = 0;
break;
case NETLINK_ADD_MEMBERSHIP:
case NETLINK_DROP_MEMBERSHIP: {
@@ -1623,8 +1624,6 @@ static int netlink_setsockopt(struct socket *sock, int 
level, int optname,
netlink_table_ungrab();
if (optname == NETLINK_DROP_MEMBERSHIP && nlk->netlink_unbind)
nlk->netlink_unbind(sock_net(sk), val);
-
-   err = 0;
break;
}
case NETLINK_BROADCAST_ERROR:
@@ -1632,7 +1631,6 @@ static int netlink_setsockopt(struct socket *sock, int 
level, int optname,
nlk->flags |= NETLINK_F_BROADCAST_SEND_ERROR;
else
nlk->flags &= ~NETLINK_F_BROADCAST_SEND_ERROR;
-   err = 0;
break;
case NETLINK_NO_ENOBUFS:
if (val) {
@@ -1642,7 +1640,6 @@ static int netlink_setsockopt(struct socket *sock, int 
level, int optname,
} else {
nlk->flags &= ~NETLINK_F_RECV_NO_ENOBUFS;
}
-   err = 0;
break;
case NETLINK_LISTEN_ALL_NSID:
if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_BROADCAST))
@@ -1652,21 +1649,18 @@ static int netlink_setsockopt(struct socket *sock, int 
level, int optname,
nlk->flags |= NETLINK_F_LISTEN_ALL_NSID;
else
nlk->flags &= ~NETLINK_F_LISTEN_ALL_NSID;
-   err = 0;
break;
case NETLINK_CAP_ACK:
if (val)
nlk->flags |= NETLINK_F_CAP_ACK;
else
nlk->flags &= ~NETLINK_F_CAP_ACK;
-   err = 0;
break;
case NETLINK_EXT_ACK:
if (val)
nlk->flags |= NETLINK_F_EXT_ACK;
else
nlk->flags &= ~NETLINK_F_EXT_ACK;
-   err = 0;
break;
default:
err = -ENOPROTOOPT;
@@ -1679,7 +1673,7 @@ static int netlink_getsockopt(struct socket *sock, int 
level, int optname,
 {
struct sock *sk = sock->sk;
struct netlink_sock *nlk = nlk_sk(sk);
-   int len, val, err;
+   int len, val, err = 0;
 
if (level != SOL_NETLINK)
return -ENOPROTOOPT;
@@ -1698,7 +1692,6 @@ static int netlink_getsockopt(struct socket *sock, int 
level, int optname,
if (put_user(len, optlen) ||
put_user(val, optval))
return -EFAULT;
-   err = 0;
break;
case NETLINK_BROADCAST_ERROR:
if (len < sizeof(int))
@@ -1708,7 +1701,6 @@ static int netlink_getsockopt(struct socket *sock, int 
level, int optname,
if (put_user(len, optlen) ||
put_user(val, optval))
return -EFAULT;
-   err = 0;
break;
case NETLINK_NO_ENOBUFS:
if (len < sizeof(int))
@@ -1718,12 +1710,10 @@ static int netlink_getsockopt(struct socket *sock, int 
level, int optname,
if (put_user(len, optlen) ||
put_user(val, optval))
return -EFAULT;
-   err = 0;
break;