hyperv/hn: Make sure that RNDIS packet message is at least 4B aligned.

MFC after:	1 week
Sponsored by:	Microsoft
Differential Revision:	https://reviews.freebsd.org/D9713
This commit is contained in:
Sepherosa Ziehau 2017-03-01 08:50:41 +00:00
parent 8fe90f73ae
commit 7675868a04

View File

@ -841,9 +841,22 @@ hn_rndis_init(struct hn_softc *sc)
sc->hn_rndis_agg_pkts = comp->rm_pktmaxcnt;
sc->hn_rndis_agg_align = 1U << comp->rm_align;
if (sc->hn_rndis_agg_align < sizeof(uint32_t)) {
/*
* The RNDIS packet messsage encap assumes that the RNDIS
* packet message is at least 4 bytes aligned. Fix up the
* alignment here, if the remote side sets the alignment
* too low.
*/
if_printf(sc->hn_ifp, "fixup RNDIS aggpkt align: %u -> %zu\n",
sc->hn_rndis_agg_align, sizeof(uint32_t));
sc->hn_rndis_agg_align = sizeof(uint32_t);
}
if (bootverbose) {
if_printf(sc->hn_ifp, "RNDIS ver %u.%u, pktsz %u, pktcnt %u, "
"align %u\n", comp->rm_ver_major, comp->rm_ver_minor,
if_printf(sc->hn_ifp, "RNDIS ver %u.%u, "
"aggpkt size %u, aggpkt cnt %u, aggpkt align %u\n",
comp->rm_ver_major, comp->rm_ver_minor,
sc->hn_rndis_agg_size, sc->hn_rndis_agg_pkts,
sc->hn_rndis_agg_align);
}