summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authormarkj <markj@FreeBSD.org>2016-01-26 01:15:18 +0000
committermarkj <markj@FreeBSD.org>2016-01-26 01:15:18 +0000
commit249795444f86484b88b415ebc999ef567ad8cb9a (patch)
treef478016c0d0b8f1a85aab12e79c0d928513070e8 /sys/kern
parent3d395daf1aab998d3aa712f7e2453495c5892893 (diff)
downloadFreeBSD-src-249795444f86484b88b415ebc999ef567ad8cb9a.zip
FreeBSD-src-249795444f86484b88b415ebc999ef567ad8cb9a.tar.gz
Evaluate the sysctl_running fail point before taking the sysctl lock.
The fail point handler may sleep, but this is not permitted while holding a rm read lock. MFC after: 1 week Sponsored by: EMC / Isilon Storage Division
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/kern_sysctl.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c
index 803951f..f57cd58 100644
--- a/sys/kern/kern_sysctl.c
+++ b/sys/kern/kern_sysctl.c
@@ -166,6 +166,8 @@ sysctl_root_handler_locked(struct sysctl_oid *oid, void *arg1, intmax_t arg2,
if (!(oid->oid_kind & CTLFLAG_MPSAFE))
mtx_unlock(&Giant);
+ KFAIL_POINT_ERROR(_debug_fail_point, sysctl_running, error);
+
if (tracker != NULL)
SYSCTL_RLOCK(tracker);
else
@@ -1838,8 +1840,6 @@ sysctl_root(SYSCTL_HANDLER_ARGS)
#endif
error = sysctl_root_handler_locked(oid, arg1, arg2, req, &tracker);
- KFAIL_POINT_ERROR(_debug_fail_point, sysctl_running, error);
-
out:
SYSCTL_RUNLOCK(&tracker);
return (error);
OpenPOWER on IntegriCloud