Index: sys/dev/sdmmc/if_bwfm_sdio.c =================================================================== RCS file: /cvsroot/src/sys/dev/sdmmc/if_bwfm_sdio.c,v retrieving revision 1.32 diff -p -u -r1.32 if_bwfm_sdio.c --- sys/dev/sdmmc/if_bwfm_sdio.c 12 Dec 2025 12:27:55 -0000 1.32 +++ sys/dev/sdmmc/if_bwfm_sdio.c 13 Dec 2025 11:47:00 -0000 @@ -1962,7 +1962,7 @@ bwfm_sdio_rx_glom(struct bwfm_sdio_softc struct bwfm_sdio_swhdr swhdr; struct bwfm_proto_bcdc_hdr *bcdc; struct mbuf *m, *m0; - size_t flen, off, hoff; + size_t flen, off, hoff, slen; int i; const size_t hdrlen = sizeof(hwhdr) + sizeof(swhdr); @@ -1982,18 +1982,19 @@ bwfm_sdio_rx_glom(struct bwfm_sdio_softc if (sc->sc_bwfm_attached) MCLAIM(m, &sc->sc_sc.sc_ec.ec_rx_mowner); bwfm_qput(&m0, m); - if (le16toh(sublen[i]) > m->m_len) { + slen = le16toh(sublen[i]); + if (roundup(slen,4) > m->m_len) { m_freem(m0); printf("%s: header larger than mbuf\n", DEVNAME(sc)); return; } if (bwfm_sdio_frame_read_write(sc, mtod(m, char *), - le16toh(sublen[i]), 0)) { + roundup(slen,4), 0)) { m_freem(m0); printf("%s: frame I/O error\n", DEVNAME(sc)); return; } - m->m_len = m->m_pkthdr.len = le16toh(sublen[i]); + m->m_len = m->m_pkthdr.len = slen; } if (m0->m_len >= hdrlen) {