diff options
author | rodrigc <rodrigc@FreeBSD.org> | 2013-07-15 01:32:55 +0000 |
---|---|---|
committer | rodrigc <rodrigc@FreeBSD.org> | 2013-07-15 01:32:55 +0000 |
commit | 7e3e1747c886c2c26003f94ad0e7dd03ea6cde2a (patch) | |
tree | 07b12ddaa4af38870ab0290b71afcba393c21913 /sys/netgraph | |
parent | 2bfbfc539c4069e052503398bf33ced4b1e83959 (diff) | |
download | FreeBSD-src-7e3e1747c886c2c26003f94ad0e7dd03ea6cde2a.zip FreeBSD-src-7e3e1747c886c2c26003f94ad0e7dd03ea6cde2a.tar.gz |
PR: 168520 170096
Submitted by: adrian, zec
Fix multiple kernel panics when VIMAGE is enabled in the kernel.
These fixes are based on patches submitted by Adrian Chadd and Marko Zec.
(1) Set curthread->td_vnet to vnet0 in device_probe_and_attach() just before calling
device_attach(). This fixes multiple VIMAGE related kernel panics
when trying to attach Bluetooth or USB Ethernet devices because
curthread->td_vnet is NULL.
(2) Set curthread->td_vnet in if_detach(). This fixes kernel panics when detaching networking
interfaces, especially USB Ethernet devices.
(3) Use VNET_DOMAIN_SET() in ng_btsocket.c
(4) In ng_unref_node() set curthread->td_vnet. This fixes kernel panics
when detaching Netgraph nodes.
Diffstat (limited to 'sys/netgraph')
-rw-r--r-- | sys/netgraph/bluetooth/socket/ng_btsocket.c | 4 | ||||
-rw-r--r-- | sys/netgraph/ng_base.c | 3 |
2 files changed, 6 insertions, 1 deletions
diff --git a/sys/netgraph/bluetooth/socket/ng_btsocket.c b/sys/netgraph/bluetooth/socket/ng_btsocket.c index f1620bc..d0f1246 100644 --- a/sys/netgraph/bluetooth/socket/ng_btsocket.c +++ b/sys/netgraph/bluetooth/socket/ng_btsocket.c @@ -46,6 +46,8 @@ #include <sys/sysctl.h> #include <sys/taskqueue.h> +#include <net/vnet.h> + #include <netgraph/ng_message.h> #include <netgraph/netgraph.h> #include <netgraph/bluetooth/include/ng_bluetooth.h> @@ -285,4 +287,4 @@ ng_btsocket_modevent(module_t mod, int event, void *data) return (error); } /* ng_btsocket_modevent */ -DOMAIN_SET(ng_btsocket_); +VNET_DOMAIN_SET(ng_btsocket_); diff --git a/sys/netgraph/ng_base.c b/sys/netgraph/ng_base.c index 95c6061..a5fcb14 100644 --- a/sys/netgraph/ng_base.c +++ b/sys/netgraph/ng_base.c @@ -789,6 +789,8 @@ ng_unref_node(node_p node) if (node == &ng_deadnode) return; + CURVNET_SET(node->nd_vnet); + if (refcount_release(&node->nd_refs)) { /* we were the last */ node->nd_type->refs--; /* XXX maybe should get types lock? */ @@ -807,6 +809,7 @@ ng_unref_node(node_p node) mtx_destroy(&node->nd_input_queue.q_mtx); NG_FREE_NODE(node); } + CURVNET_RESTORE(); } /************************************************************************ |