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 */ }