Another set of NULL checks in programs under usr.sbin/
ok?
diff --git usr.sbin/eigrpd/parse.y usr.sbin/eigrpd/parse.y
index f024e3cf0cd..0ac9431e829 100644
--- usr.sbin/eigrpd/parse.y
+++ usr.sbin/eigrpd/parse.y
@@ -1246,7 +1246,8 @@ get_rtr_id(void)
for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
if (strncmp(ifa->ifa_name, "carp", 4) == 0)
continue;
- if (ifa->ifa_addr->sa_family != AF_INET)
+ if (ifa->ifa_addr == NULL ||
+ ifa->ifa_addr->sa_family != AF_INET)
continue;
cur = ((struct sockaddr_in *)ifa->ifa_addr)->sin_addr.s_addr;
if ((cur & localnet) == localnet) /* skip 127/8 */
diff --git usr.sbin/httpd/parse.y usr.sbin/httpd/parse.y
index b3c8786aaee..a1afcc799c1 100644
--- usr.sbin/httpd/parse.y
+++ usr.sbin/httpd/parse.y
@@ -2124,7 +2124,8 @@ host_if(const char *s, struct addresslist *al, int max,
nextaf:
for (p = ifap; p != NULL && cnt < max; p = p->ifa_next) {
- if (p->ifa_addr->sa_family != af ||
+ if (p->ifa_addr == NULL ||
+ p->ifa_addr->sa_family != af ||
(strcmp(s, p->ifa_name) != 0 &&
!is_if_in_group(p->ifa_name, s)))
continue;
diff --git usr.sbin/ifstated/ifstated.c usr.sbin/ifstated/ifstated.c
index 225f5aaa9e0..248c2a7d2bd 100644
--- usr.sbin/ifstated/ifstated.c
+++ usr.sbin/ifstated/ifstated.c
@@ -642,7 +642,8 @@ fetch_ifstate(int do_eval)
fatal("getifaddrs");
for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
- if (ifa->ifa_addr->sa_family == AF_LINK) {
+ if (ifa->ifa_addr != NULL &&
+ ifa->ifa_addr->sa_family == AF_LINK) {
struct if_data *ifdata = ifa->ifa_data;
scan_ifstate(ifa->ifa_name, ifdata->ifi_link_state,
do_eval);
diff --git usr.sbin/inetd/inetd.c usr.sbin/inetd/inetd.c
index 4627ef81148..24a08c9b901 100644
--- usr.sbin/inetd/inetd.c
+++ usr.sbin/inetd/inetd.c
@@ -487,7 +487,8 @@ dg_broadcast(struct in_addr *in)
if (getifaddrs(&ifap) == -1)
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 ||
(ifa->ifa_flags & IFF_BROADCAST) == 0)
continue;
sin = (struct sockaddr_in *)ifa->ifa_broadaddr;
diff --git usr.sbin/ldapd/parse.y usr.sbin/ldapd/parse.y
index c003b3fcb6a..1e3801383fa 100644
--- usr.sbin/ldapd/parse.y
+++ usr.sbin/ldapd/parse.y
@@ -1122,6 +1122,8 @@ interface(const char *s, const char *cert,
for (p = ifap; p != NULL; p = p->ifa_next) {
if (strcmp(s, p->ifa_name) != 0)
continue;
+ if (p->ifa_addr == NULL)
+ continue;
switch (p->ifa_addr->sa_family) {
case AF_INET:
diff --git usr.sbin/mrouted/cfparse.y usr.sbin/mrouted/cfparse.y
index 0b8af93ea21..bf06644987c 100644
--- usr.sbin/mrouted/cfparse.y
+++ usr.sbin/mrouted/cfparse.y
@@ -558,7 +558,8 @@ ifconfaddr(a)
return (NULL);
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 &&
((struct sockaddr_in *)ifa->ifa_addr)->sin_addr.s_addr == a) {
strlcpy(ifname, ifa->ifa_name, sizeof(ifname));
freeifaddrs(ifap);
diff --git usr.sbin/mtrace/mtrace.c usr.sbin/mtrace/mtrace.c
index 5acf9ab3171..15b44fc92f7 100644
--- usr.sbin/mtrace/mtrace.c
+++ usr.sbin/mtrace/mtrace.c
@@ -284,8 +284,9 @@ get_netmask(int s, u_int32_t dst)
return (retval);
}
for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
- if (ifa->ifa_addr->sa_family != AF_INET)
- continue;
+ if (ifa->ifa_addr == NULL ||
+ ifa->ifa_addr->sa_family != AF_INET)
+ continue;
if_addr = ((struct sockaddr_in *)ifa->ifa_addr)->sin_addr.s_addr;
if_mask = ((struct sockaddr_in *)ifa->ifa_netmask)->sin_addr.s_addr;
if ((dst & if_mask) == (if_addr & if_mask)) {
diff --git usr.sbin/npppd/common/net_utils.c usr.sbin/npppd/common/net_utils.c
index e282f0dd2b5..c13679c116a 100644
--- usr.sbin/npppd/common/net_utils.c
+++ usr.sbin/npppd/common/net_utils.c
@@ -48,9 +48,10 @@ get_ifname_by_sockaddr(struct sockaddr *sa, char *ifname)
ifname0 = NULL;
/* I want other way than linear search */
getifaddrs(&addr0);
- for (addr = addr0; ifname0 == NULL&& addr != NULL;
+ for (addr = addr0; ifname0 == NULL && addr != NULL;
addr = addr->ifa_next) {
- if (addr->ifa_addr->sa_family != sa->sa_family ||
+ if (addr->ifa_addr == NULL ||
+ addr->ifa_addr->sa_family != sa->sa_family ||
addr->ifa_addr->sa_len != sa->sa_len)
continue;
switch (addr->ifa_addr->sa_family) {
diff --git usr.sbin/npppd/pppoe/pppoed.c usr.sbin/npppd/pppoe/pppoed.c
index 5b3f09dccb1..53905d5db33 100644
--- usr.sbin/npppd/pppoe/pppoed.c
+++ usr.sbin/npppd/pppoe/pppoed.c
@@ -256,7 +256,8 @@ pppoed_listener_start(pppoed_listener *_this, int restart)
found = 0;
for (ifa = ifa0; ifa != NULL; ifa = ifa->ifa_next) {
sdl = (struct sockaddr_dl *)ifa->ifa_addr;
- if (sdl->sdl_family != AF_LINK || sdl->sdl_type != IFT_ETHER ||
+ if (sdl == NULL ||
+ sdl->sdl_family != AF_LINK || sdl->sdl_type != IFT_ETHER ||
sdl->sdl_alen != ETHER_ADDR_LEN)
continue;
if (strcmp(ifa->ifa_name, _this->listen_ifname) == 0) {