]> granicus.if.org Git - sudo/commitdiff
Check for NULL ifa_addr and ifa_netmask.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Sun, 19 Apr 2009 18:09:24 +0000 (18:09 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Sun, 19 Apr 2009 18:09:24 +0000 (18:09 +0000)
Adapted from a diff from Quest Software.

interfaces.c

index 2c0c1c6bf507a80ef6730026b94cab9426cad431..f12f5bd4abc4efb06e3048e55eb9be1456f526b7 100644 (file)
@@ -139,9 +139,13 @@ load_interfaces()
        switch(ifa->ifa_addr->sa_family) {
            case AF_INET:
                sin = (struct sockaddr_in *)ifa->ifa_addr;
+               if (sin == NULL)
+                   continue;
                memcpy(&interfaces[i].addr, &sin->sin_addr,
                    sizeof(struct in_addr));
                sin = (struct sockaddr_in *)ifa->ifa_netmask;
+               if (sin == NULL)
+                   continue;
                memcpy(&interfaces[i].netmask, &sin->sin_addr,
                    sizeof(struct in_addr));
                interfaces[i].family = AF_INET;
@@ -150,9 +154,13 @@ load_interfaces()
 #ifdef HAVE_IN6_ADDR
            case AF_INET6:
                sin6 = (struct sockaddr_in6 *)ifa->ifa_addr;
+               if (sin6 == NULL)
+                   continue;
                memcpy(&interfaces[i].addr, &sin6->sin6_addr,
                    sizeof(struct in6_addr));
                sin6 = (struct sockaddr_in6 *)ifa->ifa_netmask;
+               if (sin6 == NULL)
+                   continue;
                memcpy(&interfaces[i].netmask, &sin6->sin6_addr,
                    sizeof(struct in6_addr));
                interfaces[i].family = AF_INET6;