Re: [PATCH net-next] netlink: optimize err assignment
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
From: yuan linyuSigned-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;