summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorclaudio <claudio@openbsd.org>2011-07-05 05:13:04 +0000
committerclaudio <claudio@openbsd.org>2011-07-05 05:13:04 +0000
commit8090264b5d0e556d60beaddcdd2dfd68467fa814 (patch)
tree392cdc41da4fffc04a297db3109ebdbc760d3ed8
parentFlip one .Fl interface to .Fl iface since iface is used everywhere else (diff)
downloadwireguard-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.c11
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: