Vitaliy Makkoveev:

> The ether_extract_headers() diff was reverted, because is wrong for the
> cases other than tcp/udp/icmp. We need to fix it and recommit again
> before continue.

I think (TCP or) UDP fragments are the problem.  Fragments don't have
the protocol header but will still end up here:

        case IPPROTO_UDP:
                m = m_getptr(m, hoff + hlen, &hoff);
                KASSERT(m != NULL && m->m_len - hoff >= sizeof(*ext->udp));
                ext->udp = (struct udphdr *)(mtod(m, caddr_t) + hoff);
                break;

If a tail fragment is too short, it will trigger the KASSERT().

Previously, this wasn't a problem, because if there was such a
KASSERT() as in ixl(4), it was behind a M_*_CSUM_OUT check, and we
never set those flags for fragments.

-- 
Christian "naddy" Weisgerber                          na...@mips.inka.de

Reply via email to