diff options
| author | ozaki-r <ozaki-r@NetBSD.org> | 2021-08-17 09:43:21 +0000 |
|---|---|---|
| committer | ozaki-r <ozaki-r@NetBSD.org> | 2021-08-17 09:43:21 +0000 |
| commit | 18f462c6fb40a32175647c20b0d0d83d8eb581ac (patch) | |
| tree | e4b7fd07ffe9f33cc9607cdea10311c0b20ffe88 /sys/netinet6 | |
| parent | ed59f49e9fb8cec2fa7a9597f2a31396ed5d052c (diff) | |
nd6: prevent ln from being freed while releasing held packets
Diffstat (limited to 'sys/netinet6')
| -rw-r--r-- | sys/netinet6/nd6.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/netinet6/nd6.c b/sys/netinet6/nd6.c index bc4a857a784..8b0e13e7ee3 100644 --- a/sys/netinet6/nd6.c +++ b/sys/netinet6/nd6.c @@ -1,4 +1,4 @@ -/* $NetBSD: nd6.c,v 1.276 2020/12/28 20:19:50 nia Exp $ */ +/* $NetBSD: nd6.c,v 1.277 2021/08/17 09:43:21 ozaki-r Exp $ */ /* $KAME: nd6.c,v 1.279 2002/06/08 11:16:51 itojun Exp $ */ /* @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nd6.c,v 1.276 2020/12/28 20:19:50 nia Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nd6.c,v 1.277 2021/08/17 09:43:21 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -1305,6 +1305,7 @@ nd6_llinfo_release_pkts(struct llentry *ln, struct ifnet *ifp) m_hold = ln->la_hold, ln->la_hold = NULL, ln->la_numheld = 0; + LLE_ADDREF(ln); LLE_WUNLOCK(ln); for (; m_hold != NULL; m_hold = m_hold_next) { m_hold_next = m_hold->m_nextpkt; @@ -1318,6 +1319,7 @@ nd6_llinfo_release_pkts(struct llentry *ln, struct ifnet *ifp) ip6_if_output(ifp, ifp, m_hold, &sin6, NULL); } LLE_WLOCK(ln); + LLE_REMREF(ln); } /* |
