svn commit: r189452 - head/sys/dev/usb/wlan

Andrew Thompson thompsa at FreeBSD.org
Fri Mar 6 09:04:48 PST 2009


Author: thompsa
Date: Fri Mar  6 17:04:47 2009
New Revision: 189452
URL: http://svn.freebsd.org/changeset/base/189452

Log:
  Ensure the cached rq pointer is still valid before waking up the address, the
  zyd_cmd function may have timed out. It wouldnt cause a panic but could wakeup
  someone.
  
  Spotted by:	HPS

Modified:
  head/sys/dev/usb/wlan/if_zyd.c

Modified: head/sys/dev/usb/wlan/if_zyd.c
==============================================================================
--- head/sys/dev/usb/wlan/if_zyd.c	Fri Mar  6 16:47:50 2009	(r189451)
+++ head/sys/dev/usb/wlan/if_zyd.c	Fri Mar  6 17:04:47 2009	(r189452)
@@ -796,10 +796,14 @@ zyd_intr_write_callback(struct usb2_xfer
 
 	switch (USB_GET_STATE(xfer)) {
 	case USB_ST_TRANSFERRED:
-		rqp = xfer->priv_fifo;
-		DPRINTF(sc, ZYD_DEBUG_CMD, "command %p transferred\n", rqp);
-		if ((rqp->flags & ZYD_CMD_FLAG_READ) == 0)
-			wakeup(rqp);	/* wakeup caller */
+		DPRINTF(sc, ZYD_DEBUG_CMD, "command %p transferred\n",
+		    xfer->priv_fifo);
+		STAILQ_FOREACH(rqp, &sc->sc_rqh, rq) {
+			/* Ensure the cached rq pointer is still valid */
+			if (rqp == xfer->priv_fifo &&
+			    (rqp->flags & ZYD_CMD_FLAG_READ) == 0)
+				wakeup(rqp);	/* wakeup caller */
+		}
 
 		/* FALLTHROUGH */
 	case USB_ST_SETUP:


More information about the svn-src-all mailing list