The driver already keeps track of the size of the allocated buffer, so use it.
Diff is untested as I don't have a wi(4) @ USB. ok? Index: if_wi_usb.c =================================================================== RCS file: /cvs/src/sys/dev/usb/if_wi_usb.c,v retrieving revision 1.68 diff -u -p -r1.68 if_wi_usb.c --- if_wi_usb.c 24 Nov 2015 17:11:40 -0000 1.68 +++ if_wi_usb.c 8 Nov 2018 16:53:12 -0000 @@ -409,9 +409,10 @@ wi_usb_detach(struct device *self, int f while (sc->wi_usb_nummem) { sc->wi_usb_nummem--; - if (sc->wi_usb_txmem[sc->wi_usb_nummem] != NULL) - free(sc->wi_usb_txmem[sc->wi_usb_nummem], M_DEVBUF, 0); + free(sc->wi_usb_txmem[sc->wi_usb_nummem], M_DEVBUF, + sc->wi_usb_txmemsize[sc->wi_usb_nummem]); sc->wi_usb_txmem[sc->wi_usb_nummem] = NULL; + sc->wi_usb_txmemsize[sc->wi_usb_nummem] = 0; } if (sc->wi_usb_ep[WI_USB_ENDPT_INTR] != NULL) { @@ -541,8 +542,10 @@ wi_cmd_usb(struct wi_softc *wsc, int cmd /* free alloc_nicmem regions */ while (sc->wi_usb_nummem) { sc->wi_usb_nummem--; - free(sc->wi_usb_txmem[sc->wi_usb_nummem], M_DEVBUF, 0); + free(sc->wi_usb_txmem[sc->wi_usb_nummem], M_DEVBUF, + sc->wi_usb_txmemsize[sc->wi_usb_nummem]); sc->wi_usb_txmem[sc->wi_usb_nummem] = NULL; + sc->wi_usb_txmemsize[sc->wi_usb_nummem] = 0; } #if 0