diff options
author | 2007-07-20 19:00:35 +0000 | |
---|---|---|
committer | 2007-07-20 19:00:35 +0000 | |
commit | fbb3ad48a623a0afc2f03a18bea34e1d7d350ba8 (patch) | |
tree | 64469db4139a32006e1c25a88b0fce7401f9616a /sys/netinet/ip_output.c | |
parent | Oh, look, code that begins like this: (diff) | |
download | wireguard-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.c | 6 |
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; |