svn commit: r246570 - head/sys/dev/usb/wlan
Hans Petter Selasky
hselasky at FreeBSD.org
Fri Feb 8 22:51:10 UTC 2013
Author: hselasky
Date: Fri Feb 8 22:51:09 2013
New Revision: 246570
URL: http://svnweb.freebsd.org/changeset/base/246570
Log:
Make sure we don't leak command buffers when a USB
command transfer fails.
MFC after: 1 week
Reported by: Ian FREISLICH
Modified:
head/sys/dev/usb/wlan/if_uath.c
Modified: head/sys/dev/usb/wlan/if_uath.c
==============================================================================
--- head/sys/dev/usb/wlan/if_uath.c Fri Feb 8 22:45:47 2013 (r246569)
+++ head/sys/dev/usb/wlan/if_uath.c Fri Feb 8 22:51:09 2013 (r246570)
@@ -2436,11 +2436,8 @@ uath_intr_tx_callback(struct usb_xfer *x
UATH_ASSERT_LOCKED(sc);
- switch (USB_GET_STATE(xfer)) {
- case USB_ST_TRANSFERRED:
- cmd = STAILQ_FIRST(&sc->sc_cmd_active);
- if (cmd == NULL)
- goto setup;
+ cmd = STAILQ_FIRST(&sc->sc_cmd_active);
+ if (cmd != NULL && USB_GET_STATE(xfer) != USB_ST_SETUP) {
STAILQ_REMOVE_HEAD(&sc->sc_cmd_active, next);
UATH_STAT_DEC(sc, st_cmd_active);
STAILQ_INSERT_TAIL((cmd->flags & UATH_CMD_FLAG_READ) ?
@@ -2449,7 +2446,10 @@ uath_intr_tx_callback(struct usb_xfer *x
UATH_STAT_INC(sc, st_cmd_waiting);
else
UATH_STAT_INC(sc, st_cmd_inactive);
- /* FALLTHROUGH */
+ }
+
+ switch (USB_GET_STATE(xfer)) {
+ case USB_ST_TRANSFERRED:
case USB_ST_SETUP:
setup:
cmd = STAILQ_FIRST(&sc->sc_cmd_pending);
More information about the svn-src-head
mailing list