summaryrefslogtreecommitdiffstats
path: root/sys/netinet/ip_output.c
diff options
context:
space:
mode:
authorclaudio <claudio@openbsd.org>2007-07-20 19:00:35 +0000
committerclaudio <claudio@openbsd.org>2007-07-20 19:00:35 +0000
commitfbb3ad48a623a0afc2f03a18bea34e1d7d350ba8 (patch)
tree64469db4139a32006e1c25a88b0fce7401f9616a /sys/netinet/ip_output.c
parentOh, look, code that begins like this: (diff)
downloadwireguard-openbsd-fbb3ad48a623a0afc2f03a18bea34e1d7d350ba8.tar.xz
wireguard-openbsd-fbb3ad48a623a0afc2f03a18bea34e1d7d350ba8.zip
Remove inm_ifp from struct in_multi -- caching struct ifnet is dangerous
because interfaces may disappear without notice causing use after free bugs. Instead use the inm_ia->ia_ifp as a hint, struct in_ifaddr correctly tracks removals of interfaces and invalidates ia_ifp in such cases. looks good henning@ markus@
Diffstat (limited to 'sys/netinet/ip_output.c')
-rw-r--r--sys/netinet/ip_output.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c
index 952c9b75b05..e4c01b26373 100644
--- a/sys/netinet/ip_output.c
+++ b/sys/netinet/ip_output.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ip_output.c,v 1.187 2007/05/30 04:46:45 henning Exp $ */
+/* $OpenBSD: ip_output.c,v 1.188 2007/07/20 19:00:35 claudio Exp $ */
/* $NetBSD: ip_output.c,v 1.28 1996/02/13 23:43:07 christos Exp $ */
/*
@@ -1825,7 +1825,7 @@ ip_setmoptions(optname, imop, m)
* membership slots are full.
*/
for (i = 0; i < imo->imo_num_memberships; ++i) {
- if (imo->imo_membership[i]->inm_ifp == ifp &&
+ if (imo->imo_membership[i]->inm_ia->ia_ifp == ifp &&
imo->imo_membership[i]->inm_addr.s_addr
== mreq->imr_multiaddr.s_addr)
break;
@@ -1882,7 +1882,7 @@ ip_setmoptions(optname, imop, m)
*/
for (i = 0; i < imo->imo_num_memberships; ++i) {
if ((ifp == NULL ||
- imo->imo_membership[i]->inm_ifp == ifp) &&
+ imo->imo_membership[i]->inm_ia->ia_ifp == ifp) &&
imo->imo_membership[i]->inm_addr.s_addr ==
mreq->imr_multiaddr.s_addr)
break;