From b4adfcf2f4ae75ca472941bff0eef710ec3b6abe Mon Sep 17 00:00:00 2001 From: Brian Feldman Date: Fri, 11 Jun 2004 02:20:37 +0000 Subject: [PATCH] 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 --- sys/kern/kern_sysctl.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c index 79e99a664a2..39214de4d0c 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;