Hi,

these last ones are a bit different from the others:

Two cases in libc, two in ifconfig, and one in isakmpd that is a bit tricky.

comments?
ok?

diff --git lib/libc/rpc/get_myaddress.c lib/libc/rpc/get_myaddress.c
index d0ac78f796e..b84968e1807 100644
--- lib/libc/rpc/get_myaddress.c
+++ lib/libc/rpc/get_myaddress.c
@@ -67,6 +67,7 @@ get_myaddress(struct sockaddr_in *addr)
   again:
        for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
                if ((ifa->ifa_flags & IFF_UP) &&
+                   ifa->ifa_addr != NULL &&
                    ifa->ifa_addr->sa_family == AF_INET &&
                    (loopback == 1 && (ifa->ifa_flags & IFF_LOOPBACK))) {
                        *addr = *((struct sockaddr_in *)ifa->ifa_addr);
diff --git lib/libc/rpc/pmap_rmt.c lib/libc/rpc/pmap_rmt.c
index 097999b5ae6..a6c41cf7175 100644
--- lib/libc/rpc/pmap_rmt.c
+++ lib/libc/rpc/pmap_rmt.c
@@ -163,7 +163,8 @@ newgetbroadcastnets(struct in_addr **addrsp)
                return 0;
 
        for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
-               if (ifa->ifa_addr->sa_family != AF_INET)
+               if (ifa->ifa_addr == NULL ||
+                   ifa->ifa_addr->sa_family != AF_INET)
                        continue;
                if ((ifa->ifa_flags & IFF_BROADCAST) &&
                    (ifa->ifa_flags & IFF_UP) &&
@@ -180,7 +181,8 @@ newgetbroadcastnets(struct in_addr **addrsp)
        }
 
        for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
-               if (ifa->ifa_addr->sa_family != AF_INET)
+               if (ifa->ifa_addr == NULL ||
+                   ifa->ifa_addr->sa_family != AF_INET)
                        continue;
                if ((ifa->ifa_flags & IFF_BROADCAST) &&
                    (ifa->ifa_flags & IFF_UP) &&
diff --git regress/sys/netinet/in_pcbbind/runtest.c 
regress/sys/netinet/in_pcbbind/runtest.c
index e26d2832dce..bb93cc71415 100644
--- regress/sys/netinet/in_pcbbind/runtest.c
+++ regress/sys/netinet/in_pcbbind/runtest.c
@@ -415,7 +415,8 @@ main(int argc, char *argv[])
                        err(2, "getifaddrs()");
                curifa = ifap;
                while (curifa) {
-                       if (memcmp(curifa->ifa_addr,
+                       if (curifa->ifa_addr != NULL &&
+                           memcmp(curifa->ifa_addr,
                            mifa->ai_addr,
                            mifa->ai_addrlen) == 0)
                                break;
diff --git sbin/ifconfig/ifconfig.c sbin/ifconfig/ifconfig.c
index 3799cc3a8e9..4dfcc628ce6 100644
--- sbin/ifconfig/ifconfig.c
+++ sbin/ifconfig/ifconfig.c
@@ -1180,12 +1180,13 @@ printif(char *name, int ifaliases)
                        }
                }
                /* quickhack: sizeof(ifr) < sizeof(ifr6) */
-               if (ifa->ifa_addr->sa_family == AF_INET6) {
+               if (ifa->ifa_addr != NULL &&
+                   ifa->ifa_addr->sa_family == AF_INET6) {
                        memset(&ifr6, 0, sizeof(ifr6));
                        memcpy(&ifr6.ifr_addr, ifa->ifa_addr,
                            MINIMUM(sizeof(ifr6.ifr_addr), 
ifa->ifa_addr->sa_len));
                        ifrp = (struct ifreq *)&ifr6;
-               } else {
+               } else if (ifa->ifa_addr != NULL) {
                        memset(&ifr, 0, sizeof(ifr));
                        memcpy(&ifr.ifr_addr, ifa->ifa_addr,
                            MINIMUM(sizeof(ifr.ifr_addr), 
ifa->ifa_addr->sa_len));
@@ -1194,7 +1195,8 @@ printif(char *name, int ifaliases)
                strlcpy(ifname, ifa->ifa_name, sizeof(ifname));
                strlcpy(ifrp->ifr_name, ifa->ifa_name, sizeof(ifrp->ifr_name));
 
-               if (ifa->ifa_addr->sa_family == AF_LINK) {
+               if (ifa->ifa_addr != NULL &&
+                   ifa->ifa_addr->sa_family == AF_LINK) {
                        namep = ifa->ifa_name;
                        if (getinfo(ifrp, 0) < 0)
                                continue;
@@ -1209,8 +1211,9 @@ printif(char *name, int ifaliases)
                if (!namep || !strcmp(namep, ifa->ifa_name)) {
                        const struct afswtch *p;
 
-                       if (ifa->ifa_addr->sa_family == AF_INET &&
-                           ifaliases == 0 && noinet == 0)
+                       if (ifa->ifa_addr == NULL ||
+                           (ifa->ifa_addr->sa_family == AF_INET &&
+                           ifaliases == 0 && noinet == 0))
                                continue;
                        if ((p = afp) != NULL) {
                                if (ifa->ifa_addr->sa_family == p->af_af)
diff --git sbin/isakmpd/virtual.c sbin/isakmpd/virtual.c
index 52a692a72c0..6d0db8cd004 100644
--- sbin/isakmpd/virtual.c
+++ sbin/isakmpd/virtual.c
@@ -334,17 +334,23 @@ virtual_bind_if(char *ifname, struct sockaddr *if_addr, 
void *arg)
        char    *addr_str;
        int      s, error;
 
-       if (sockaddr2text(if_addr, &addr_str, 0))
+       addr_str = 0;
+       if (if_addr != NULL &&
+           sockaddr2text(if_addr, &addr_str, 0))
                addr_str = 0;
 
        LOG_DBG((LOG_TRANSPORT, 90,
            "virtual_bind_if: interface %s family %s address %s",
            ifname ? ifname : "<unknown>",
-           if_addr->sa_family == AF_INET ? "v4" :
-           (if_addr->sa_family == AF_INET6 ? "v6" : "<unknown>"),
+           if_addr == NULL ? "<invalid>" :
+               (if_addr->sa_family == AF_INET ? "v4" :
+                   (if_addr->sa_family == AF_INET6 ? "v6" : "<unknown>")),
            addr_str ? addr_str : "<invalid>"));
        free(addr_str);
 
+       if (if_addr == NULL)
+               return 0;
+
        /*
         * Drop non-Internet stuff.
         */

Reply via email to