svn commit: r285208 - head/sys/kern
Patrick Kelsey
pkelsey at FreeBSD.org
Mon Jul 6 16:07:22 UTC 2015
Author: pkelsey
Date: Mon Jul 6 16:07:21 2015
New Revision: 285208
URL: https://svnweb.freebsd.org/changeset/base/285208
Log:
Don't acquire sysctlmemlock in userland_sysctl() when the old value
pointer is NULL, as in that case there are no userland pages that
could potentially be wired. It is common for old to be NULL and
oldlenp to be non-NULL in calls to userland_sysctl(), as this is used
to probe for the length of a variable-length sysctl entry before
retrieving a value. Note that it is typical for such calls to be made
with an uninitialized value in *oldlenp, so sysctlmemlock was
essentially being acquired at random (depending on the uninitialized
value in *oldlenp being > PAGE_SIZE or not) for these calls prior to
this patch.
Differential Revision: https://reviews.freebsd.org/D2987
Reviewed by: mjg, kib
Approved by: jmallett (mentor)
MFC after: 1 month
Modified:
head/sys/kern/kern_sysctl.c
Modified: head/sys/kern/kern_sysctl.c
==============================================================================
--- head/sys/kern/kern_sysctl.c Mon Jul 6 14:09:00 2015 (r285207)
+++ head/sys/kern/kern_sysctl.c Mon Jul 6 16:07:21 2015 (r285208)
@@ -1784,7 +1784,7 @@ userland_sysctl(struct thread *td, int *
ktrsysctl(name, namelen);
#endif
- if (req.oldlen > PAGE_SIZE) {
+ if (req.oldptr && req.oldlen > PAGE_SIZE) {
memlocked = 1;
sx_xlock(&sysctlmemlock);
} else
More information about the svn-src-all
mailing list