On Tue, Dec 29, 2020 at 03:42:20PM +0100, Sebastian Benoit wrote: > Hi, > > claudios bgpd diff and florian mentioning rad(8) made me look into usr.sbin/ > for getifaddrs() usage. I think these need a NULL check as well. > > ok?
Looks OK to me. > diff --git usr.sbin/ospf6d/parse.y usr.sbin/ospf6d/parse.y > index f163e24149d..509aa2f2e88 100644 > --- usr.sbin/ospf6d/parse.y > +++ usr.sbin/ospf6d/parse.y > @@ -1253,7 +1253,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/ospfd/parse.y usr.sbin/ospfd/parse.y > index a09696504f8..3fbcca0c911 100644 > --- usr.sbin/ospfd/parse.y > +++ usr.sbin/ospfd/parse.y > @@ -1469,7 +1469,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/pppd/sys-bsd.c usr.sbin/pppd/sys-bsd.c > index e8deee6d2ff..73f0e287938 100644 > --- usr.sbin/pppd/sys-bsd.c > +++ usr.sbin/pppd/sys-bsd.c > @@ -1334,6 +1334,8 @@ get_ether_addr(ipaddr, hwaddr) > * address on the same subnet as `ipaddr'. > */ > for (ifa = ifap; ifa; ifa = ifa->ifa_next) { > + if (ifa->ifa_addr == NULL) > + continue; > if (ifa->ifa_addr->sa_family == AF_INET) { > ina = ((struct sockaddr_in *)ifa->ifa_addr)->sin_addr.s_addr; > /* > @@ -1367,6 +1369,8 @@ get_ether_addr(ipaddr, hwaddr) > */ > ifp = ifa; > for (ifa = ifap; ifa; ifa = ifa->ifa_next) { > + if (ifa->ifa_addr == NULL) > + continue; > if (strcmp(ifp->ifa_name, ifa->ifa_name) == 0 > && ifa->ifa_addr->sa_family == AF_LINK) { > /* > @@ -1418,8 +1422,9 @@ GetMask(addr) > /* > * Check the interface's internet address. > */ > - if (ifa->ifa_addr->sa_family != AF_INET) > - continue; > + if (ifa->ifa_addr == NULL || > + ifa->ifa_addr->sa_family != AF_INET) > + continue; > ina = ((struct sockaddr_in *)ifa->ifa_addr)->sin_addr.s_addr; > if ((ntohl(ina) & nmask) != (addr & nmask)) > continue; > diff --git usr.sbin/rad/frontend.c usr.sbin/rad/frontend.c > index b69e9b7b0a3..c4dcf46e068 100644 > --- usr.sbin/rad/frontend.c > +++ usr.sbin/rad/frontend.c > @@ -731,7 +731,8 @@ get_link_state(char *if_name) > return LINK_STATE_UNKNOWN; > } > 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) > continue; > if (strcmp(if_name, ifa->ifa_name) != 0) > continue; > @@ -969,7 +970,8 @@ interface_has_linklocal_address(char *name) > for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) { > if (strcmp(name, ifa->ifa_name) != 0) > continue; > - if (ifa->ifa_addr->sa_family != AF_INET6) > + if (ifa->ifa_addr == NULL || > + ifa->ifa_addr->sa_family != AF_INET6) > continue; > > sin6 = (struct sockaddr_in6 *)ifa->ifa_addr; > @@ -1013,7 +1015,8 @@ get_interface_prefixes(struct ra_iface *ra_iface, > struct ra_prefix_conf > for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) { > if (strcmp(ra_iface->name, ifa->ifa_name) != 0) > continue; > - if (ifa->ifa_addr->sa_family != AF_INET6) > + if (ifa->ifa_addr == NULL || > + ifa->ifa_addr->sa_family != AF_INET6) > continue; > > sin6 = (struct sockaddr_in6 *)ifa->ifa_addr; > diff --git usr.sbin/rarpd/rarpd.c usr.sbin/rarpd/rarpd.c > index f3227883404..7652dcd3c4f 100644 > --- usr.sbin/rarpd/rarpd.c > +++ usr.sbin/rarpd/rarpd.c > @@ -200,6 +200,8 @@ init_all(void) > error("getifaddrs: %s", strerror(errno)); > > for (ifa = ifap; ifa; ifa = ifa->ifa_next) { > + if (ifa->ifa_addr == NULL) > + continue; > sdl = (struct sockaddr_dl *)ifa->ifa_addr; > if (sdl->sdl_family != AF_LINK || sdl->sdl_type != IFT_ETHER || > sdl->sdl_alen != 6) > @@ -513,6 +515,8 @@ lookup_addrs(char *ifname, struct if_info *p) > for (ifa = ifap; ifa; ifa = ifa->ifa_next) { > if (strcmp(ifa->ifa_name, ifname)) > continue; > + if (ifa->ifa_addr == NULL) > + continue; > sdl = (struct sockaddr_dl *) ifa->ifa_addr; > if (sdl->sdl_family == AF_LINK && > sdl->sdl_type == IFT_ETHER && sdl->sdl_alen == 6) { > diff --git usr.sbin/relayd/parse.y usr.sbin/relayd/parse.y > index b20f2480752..55fe880ce3e 100644 > --- usr.sbin/relayd/parse.y > +++ usr.sbin/relayd/parse.y > @@ -3186,7 +3186,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/route6d/route6d.c usr.sbin/route6d/route6d.c > index ee1cf0b6d1c..7c8b9105e5e 100644 > --- usr.sbin/route6d/route6d.c > +++ usr.sbin/route6d/route6d.c > @@ -1370,7 +1370,8 @@ ifconfig(void) > } > > for (ifa = ifap; ifa; ifa = ifa->ifa_next) { > - if (ifa->ifa_addr->sa_family != AF_INET6) > + if (ifa->ifa_addr == NULL || > + ifa->ifa_addr->sa_family != AF_INET6) > continue; > ifcp = ifc_find(ifa->ifa_name); > /* we are interested in multicast-capable interfaces */ > diff --git usr.sbin/ypbind/ypbind.c usr.sbin/ypbind/ypbind.c > index a4ce3f62ff1..3e5498fb3aa 100644 > --- usr.sbin/ypbind/ypbind.c > +++ usr.sbin/ypbind/ypbind.c > @@ -757,7 +757,8 @@ broadcast(struct _dom_binding *ypdb, char *buf, int > outlen) > return -1; > } > 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_UP) == 0) > continue; > -- :wq Claudio