Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 23 Nov 2010 20:23:25 +0000 (UTC)
From:      Weongyo Jeong <weongyo@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r215764 - head/sys/dev/usb
Message-ID:  <201011232023.oANKNPME041953@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: weongyo
Date: Tue Nov 23 20:23:25 2010
New Revision: 215764
URL: http://svn.freebsd.org/changeset/base/215764

Log:
  Fixes a kernel crash when usb module is reloaded after unload that it
  didn't destroy the cdev properly.
  
  Pointy hat to:	me
  Reported by:	Brandon Gooch <jamesbrandongooch at gmail dot com>, jkim

Modified:
  head/sys/dev/usb/usb_pf.c

Modified: head/sys/dev/usb/usb_pf.c
==============================================================================
--- head/sys/dev/usb/usb_pf.c	Tue Nov 23 19:23:47 2010	(r215763)
+++ head/sys/dev/usb/usb_pf.c	Tue Nov 23 20:23:25 2010	(r215764)
@@ -141,6 +141,7 @@ static struct cdevsw usbpf_cdevsw = {
 	.d_kqfilter =	usbpf_kqfilter,
 };
 
+static struct cdev *usbpf_cdev;
 static LIST_HEAD(, usbpf_if)	usbpf_iflist;
 static struct mtx	usbpf_mtx;		/* global lock */
 static int usbpf_uifd_cnt;
@@ -1850,13 +1851,26 @@ usbpf_append_bytes(struct usbpf_d *ud, c
 static void
 usbpf_drvinit(void *unused)
 {
-	struct cdev *dev;
 
 	mtx_init(&usbpf_mtx, "USB packet filter global lock", NULL,
 	    MTX_DEF);
 	LIST_INIT(&usbpf_iflist);
 
-	dev = make_dev(&usbpf_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600, "usbpf");
+	usbpf_cdev = make_dev(&usbpf_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600,
+	    "usbpf");
+}
+
+static void
+usbpf_drvuninit(void)
+{
+
+	if (usbpf_cdev != NULL) {
+		destroy_dev(usbpf_cdev);
+		usbpf_cdev = NULL;
+	}
+	mtx_destroy(&usbpf_mtx);
 }
 
 SYSINIT(usbpf_dev, SI_SUB_DRIVERS, SI_ORDER_MIDDLE, usbpf_drvinit, NULL);
+SYSUNINIT(usbpf_undev, SI_SUB_DRIVERS, SI_ORDER_MIDDLE, usbpf_drvuninit, NULL);
+



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201011232023.oANKNPME041953>