diff --git a/sys/net/if_vxlan.c b/sys/net/if_vxlan.c --- a/sys/net/if_vxlan.c +++ b/sys/net/if_vxlan.c @@ -2814,12 +2814,16 @@ struct ether_header *eh; int error; + m = *m0; + + if (m->m_pkthdr.len < ETHER_HDR_LEN) + return (EINVAL); + sc = vxlan_socket_lookup_softc(vso, vni); if (sc == NULL) return (ENOENT); ifp = sc->vxl_ifp; - m = *m0; eh = mtod(m, struct ether_header *); if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) { @@ -2859,8 +2863,9 @@ m->m_pkthdr.csum_data = 0; } - error = netisr_dispatch(NETISR_ETHER, m); + (*ifp->if_input)(ifp, m); *m0 = NULL; + error = 0; out: vxlan_release(sc);