Page MenuHomeFreeBSD

D24821.id71684.diff
No OneTemporary

D24821.id71684.diff

Index: sys/netinet6/nd6.c
===================================================================
--- sys/netinet6/nd6.c
+++ sys/netinet6/nd6.c
@@ -821,9 +821,27 @@
clear_llinfo_pqueue(ln);
}
nd6_free(&ln, 0);
- if (m != NULL)
- icmp6_error2(m, ICMP6_DST_UNREACH,
- ICMP6_DST_UNREACH_ADDR, 0, ifp);
+ if (m != NULL) {
+ struct mbuf *n = m;
+
+ /*
+ * if there are any ummapped mbufs, we
+ * must free them, rather than using
+ * them for an ICMP, as they cannot be
+ * checksummed.
+ */
+ while (NULL != (n = n->m_next)) {
+ if (n->m_flags & M_EXTPG)
+ break;
+ }
+ if (n != NULL) {
+ m_freem(m);
+ m = NULL;
+ } else {
+ icmp6_error2(m, ICMP6_DST_UNREACH,
+ ICMP6_DST_UNREACH_ADDR, 0, ifp);
+ }
+ }
}
break;
case ND6_LLINFO_REACHABLE:

File Metadata

Mime Type
text/plain
Expires
Sat, Mar 7, 10:06 PM (8 h, 49 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29383056
Default Alt Text
D24821.id71684.diff (839 B)

Event Timeline