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