diff options
author | rwatson <rwatson@FreeBSD.org> | 2005-01-23 20:59:19 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2005-01-23 20:59:19 +0000 |
commit | 293a12c083ef4fd97d15da81ffbef7ec687153ba (patch) | |
tree | 2a3038b3a076f63f395471d1ca5fe1bd80aafc44 /sys/kern/kern_mib.c | |
parent | 4af1a370c8aa2ec76c48fd901aece75c01526f6e (diff) | |
download | FreeBSD-src-293a12c083ef4fd97d15da81ffbef7ec687153ba.zip FreeBSD-src-293a12c083ef4fd97d15da81ffbef7ec687153ba.tar.gz |
When retrieving the current per-jails securelevel for a sysctl read,
don't acquire the prison mutex, as it's an integer read and races
here don't make a difference.
MFC after: 1 week
Diffstat (limited to 'sys/kern/kern_mib.c')
-rw-r--r-- | sys/kern/kern_mib.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/sys/kern/kern_mib.c b/sys/kern/kern_mib.c index 58386b3..638d6cb 100644 --- a/sys/kern/kern_mib.c +++ b/sys/kern/kern_mib.c @@ -251,13 +251,12 @@ sysctl_kern_securelvl(SYSCTL_HANDLER_ARGS) /* * If the process is in jail, return the maximum of the global and - * local levels; otherwise, return the global level. + * local levels; otherwise, return the global level. Perform a + * lockless read since the securelevel is an interger. */ - if (pr != NULL) { - mtx_lock(&pr->pr_mtx); + if (pr != NULL) level = imax(securelevel, pr->pr_securelevel); - mtx_unlock(&pr->pr_mtx); - } else + else level = securelevel; error = sysctl_handle_int(oidp, &level, 0, req); if (error || !req->newptr) |