DragonFlyBSD Kernel Audit
DF-0740 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/netinet/ip_gre.c b/sys/netinet/ip_gre.c
--- a/sys/netinet/ip_gre.c
+++ b/sys/netinet/ip_gre.c
@@ -177,6 +177,10 @@
 		return(0);
 	}
 
+	if (hlen > m->m_pkthdr.len) {
+		m_freem(m);
+		return (1);
+	}
 	m->m_data += hlen;
 	m->m_len -= hlen;
 	m->m_pkthdr.len -= hlen;
@@ -189,7 +193,7 @@
 	}
 
 	m->m_pkthdr.rcvif = &sc->sc_if;
-	m->m_flags &= ~M_HASH;
+	m->m_flags &= ~(M_HASH | M_LENCHECKED);
 	netisr_queue(isr, m);
 	return(1);	/* packet is done, no further processing needed */
 }