It is possible to end up in situations in which the loopback interface
is up but has no valid address. In that case, we expect SIOCGIFADDR
will return EADDRNOTAVAIL and valid_loopback should return FALSE such
that connman can add a loopback address back to the interface.

This is a partial fix for bug 21001
<https://bugs.meego.com/show_bug.cgi?id=21001>.

---
 plugins/loopback.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/plugins/loopback.c b/plugins/loopback.c
index ac3e2fc..f962415 100644
--- a/plugins/loopback.c
+++ b/plugins/loopback.c
@@ -188,11 +188,16 @@ static gboolean valid_loopback(int sk, struct ifreq *ifr)
        int err;
        char buf[INET_ADDRSTRLEN];
 
+       /* It is possible to end up in situations in which the
+        * loopback interface is up but has no valid address. In that
+        * case, we expect EADDRNOTAVAIL and should return FALSE.
+        */
+
        err = ioctl(sk, SIOCGIFADDR, ifr);
        if (err < 0) {
                err = -errno;
                connman_error("Getting address failed (%s)", strerror(-err));
-               return TRUE;
+               return err != -EADDRNOTAVAIL ? TRUE : FALSE;
        }
 
        addr = (struct sockaddr_in *) &ifr->ifr_addr;
-- 
1.7.6

_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman

Reply via email to