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
This commit is contained in:
Brian Feldman 2004-06-11 02:20:37 +00:00
parent c066ba2f01
commit b4adfcf2f4

View file

@ -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;