diff options
author | 2011-07-05 05:13:04 +0000 | |
---|---|---|
committer | 2011-07-05 05:13:04 +0000 | |
commit | 8090264b5d0e556d60beaddcdd2dfd68467fa814 (patch) | |
tree | 392cdc41da4fffc04a297db3109ebdbc760d3ed8 | |
parent | Flip one .Fl interface to .Fl iface since iface is used everywhere else (diff) | |
download | wireguard-openbsd-8090264b5d0e556d60beaddcdd2dfd68467fa814.tar.xz wireguard-openbsd-8090264b5d0e556d60beaddcdd2dfd68467fa814.zip |
Do not use (ifam + 1) to find the start of the sockaddrs. Use the
rtm_hdrlen instead. Also move the ifindex check way further up.
OK dlg@ bluhm@
-rw-r--r-- | usr.sbin/rtadvd/if.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/usr.sbin/rtadvd/if.c b/usr.sbin/rtadvd/if.c index 5a4ad632568..0917ff2851c 100644 --- a/usr.sbin/rtadvd/if.c +++ b/usr.sbin/rtadvd/if.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if.c,v 1.23 2010/05/21 13:41:23 chl Exp $ */ +/* $OpenBSD: if.c,v 1.24 2011/07/05 05:13:04 claudio Exp $ */ /* $KAME: if.c,v 1.17 2001/01/21 15:27:30 itojun Exp $ */ /* @@ -269,9 +269,11 @@ get_next_msg(char *buf, char *lim, int ifindex, size_t *lenp, int filter) case RTM_NEWADDR: case RTM_DELADDR: ifam = (struct ifa_msghdr *)rtm; + if (ifindex && ifam->ifam_index != ifindex) + continue; /* address related checks */ - sa = (struct sockaddr *)(ifam + 1); + sa = (struct sockaddr *)((char *)rtm + rtm->rtm_hdrlen); get_rtaddrs(ifam->ifam_addrs, sa, rti_info); if ((ifa = rti_info[RTAX_IFA]) == NULL || (ifa->sa_family != AF_INET && @@ -283,11 +285,8 @@ get_next_msg(char *buf, char *lim, int ifindex, size_t *lenp, int filter) IN6_IS_ADDR_MULTICAST(&SIN6(ifa)->sin6_addr))) continue; - if (ifindex && ifam->ifam_index != ifindex) - continue; - /* found */ - *lenp = ifam->ifam_msglen; + *lenp = rtm->rtm_msglen; return (char *)rtm; /* NOTREACHED */ case RTM_IFINFO: |