When using ioctl to get address of interface, we can't
get it anymore. For example, the command is show as below.

        # ifconfig eth0

In the patch ("03aef17bb79b3"), the devinet_ioctl does not
return a suitable value, even though we can find it in
the kernel. Then fix it now.

Fixes: 03aef17bb79b3 ("devinet_ioctl(): take copyin/copyout to caller")
Cc: Al Viro <v...@zeniv.linux.org.uk>
Signed-off-by: Tonghao Zhang <xiangxia.m....@gmail.com>
---
 net/ipv4/devinet.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
index e056c00..40f0017 100644
--- a/net/ipv4/devinet.c
+++ b/net/ipv4/devinet.c
@@ -1048,18 +1048,22 @@ int devinet_ioctl(struct net *net, unsigned int cmd, 
struct ifreq *ifr)
 
        switch (cmd) {
        case SIOCGIFADDR:       /* Get interface address */
+               ret = 0;
                sin->sin_addr.s_addr = ifa->ifa_local;
                break;
 
        case SIOCGIFBRDADDR:    /* Get the broadcast address */
+               ret = 0;
                sin->sin_addr.s_addr = ifa->ifa_broadcast;
                break;
 
        case SIOCGIFDSTADDR:    /* Get the destination address */
+               ret = 0;
                sin->sin_addr.s_addr = ifa->ifa_address;
                break;
 
        case SIOCGIFNETMASK:    /* Get the netmask for the interface */
+               ret = 0;
                sin->sin_addr.s_addr = ifa->ifa_mask;
                break;
 
-- 
1.8.3.1

Reply via email to