summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorgreen <green@FreeBSD.org>2004-06-11 02:20:37 +0000
committergreen <green@FreeBSD.org>2004-06-11 02:20:37 +0000
commitff7604586b5b86ef8aed2b86aa6ea884aca4b188 (patch)
tree7d2d1815bd7a2bc8d452869fc95d8af86d7f9717 /sys
parent4125920b237c98c2a8cd60321baf22a82165469c (diff)
downloadFreeBSD-src-ff7604586b5b86ef8aed2b86aa6ea884aca4b188.zip
FreeBSD-src-ff7604586b5b86ef8aed2b86aa6ea884aca4b188.tar.gz
Make sysctl_wire_old_buffer() respect ENOMEM from vslock() by marking
the valid length as 0. This prevents vsunlock() from removing a system wire from memory that was not successfully wired (by us). Submitted by: tegge
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/kern_sysctl.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c
index 79e99a6..39214de 100644
--- a/sys/kern/kern_sysctl.c
+++ b/sys/kern/kern_sysctl.c
@@ -1101,8 +1101,11 @@ sysctl_wire_old_buffer(struct sysctl_req *req, size_t len)
req->oldfunc == sysctl_old_user) {
if (wiredlen != 0) {
ret = vslock(req->oldptr, wiredlen);
- if (ret != 0 && ret != ENOMEM)
- return (ret);
+ if (ret != 0) {
+ if (ret != ENOMEM)
+ return (ret);
+ wiredlen = 0;
+ }
}
req->lock = REQ_WIRED;
req->validlen = wiredlen;
OpenPOWER on IntegriCloud