kern_sysctl.c (217616) | kern_sysctl.c (217915) |
---|---|
1/*- 2 * Copyright (c) 1982, 1986, 1989, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Mike Karels at Berkeley Software Design, Inc. 7 * 8 * Quite extensively rewritten by Poul-Henning Kamp of the FreeBSD --- 22 unchanged lines hidden (view full) --- 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * 35 * @(#)kern_sysctl.c 8.4 (Berkeley) 4/14/94 36 */ 37 38#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 1982, 1986, 1989, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Mike Karels at Berkeley Software Design, Inc. 7 * 8 * Quite extensively rewritten by Poul-Henning Kamp of the FreeBSD --- 22 unchanged lines hidden (view full) --- 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * 35 * @(#)kern_sysctl.c 8.4 (Berkeley) 4/14/94 36 */ 37 38#include <sys/cdefs.h> |
39__FBSDID("$FreeBSD: head/sys/kern/kern_sysctl.c 217616 2011-01-19 23:00:25Z mdf $"); | 39__FBSDID("$FreeBSD: head/sys/kern/kern_sysctl.c 217915 2011-01-26 22:48:09Z mdf $"); |
40 41#include "opt_compat.h" 42#include "opt_ktrace.h" 43 44#include <sys/param.h> 45#include <sys/fail.h> 46#include <sys/systm.h> 47#include <sys/kernel.h> --- 1153 unchanged lines hidden (view full) --- 1201 1202 if (new != NULL) { 1203 req.newlen = newlen; 1204 req.newptr = new; 1205 } 1206 1207 req.oldfunc = sysctl_old_kernel; 1208 req.newfunc = sysctl_new_kernel; | 40 41#include "opt_compat.h" 42#include "opt_ktrace.h" 43 44#include <sys/param.h> 45#include <sys/fail.h> 46#include <sys/systm.h> 47#include <sys/kernel.h> --- 1153 unchanged lines hidden (view full) --- 1201 1202 if (new != NULL) { 1203 req.newlen = newlen; 1204 req.newptr = new; 1205 } 1206 1207 req.oldfunc = sysctl_old_kernel; 1208 req.newfunc = sysctl_new_kernel; |
1209 req.lock = REQ_LOCKED; | 1209 req.lock = REQ_UNWIRED; |
1210 1211 SYSCTL_XLOCK(); 1212 error = sysctl_root(0, name, namelen, &req); 1213 SYSCTL_XUNLOCK(); 1214 1215 if (req.lock == REQ_WIRED && req.validlen > 0) 1216 vsunlock(req.oldptr, req.validlen); 1217 --- 91 unchanged lines hidden (view full) --- 1309int 1310sysctl_wire_old_buffer(struct sysctl_req *req, size_t len) 1311{ 1312 int ret; 1313 size_t wiredlen; 1314 1315 wiredlen = (len > 0 && len < req->oldlen) ? len : req->oldlen; 1316 ret = 0; | 1210 1211 SYSCTL_XLOCK(); 1212 error = sysctl_root(0, name, namelen, &req); 1213 SYSCTL_XUNLOCK(); 1214 1215 if (req.lock == REQ_WIRED && req.validlen > 0) 1216 vsunlock(req.oldptr, req.validlen); 1217 --- 91 unchanged lines hidden (view full) --- 1309int 1310sysctl_wire_old_buffer(struct sysctl_req *req, size_t len) 1311{ 1312 int ret; 1313 size_t wiredlen; 1314 1315 wiredlen = (len > 0 && len < req->oldlen) ? len : req->oldlen; 1316 ret = 0; |
1317 if (req->lock == REQ_LOCKED && req->oldptr && | 1317 if (req->lock != REQ_WIRED && req->oldptr && |
1318 req->oldfunc == sysctl_old_user) { 1319 if (wiredlen != 0) { 1320 ret = vslock(req->oldptr, wiredlen); 1321 if (ret != 0) { 1322 if (ret != ENOMEM) 1323 return (ret); 1324 wiredlen = 0; 1325 } --- 19 unchanged lines hidden (view full) --- 1345 SLIST_FOREACH(oid, lsp, oid_link) { 1346 if (oid->oid_number == name[indx]) 1347 break; 1348 } 1349 if (oid == NULL) 1350 return (ENOENT); 1351 1352 indx++; | 1318 req->oldfunc == sysctl_old_user) { 1319 if (wiredlen != 0) { 1320 ret = vslock(req->oldptr, wiredlen); 1321 if (ret != 0) { 1322 if (ret != ENOMEM) 1323 return (ret); 1324 wiredlen = 0; 1325 } --- 19 unchanged lines hidden (view full) --- 1345 SLIST_FOREACH(oid, lsp, oid_link) { 1346 if (oid->oid_number == name[indx]) 1347 break; 1348 } 1349 if (oid == NULL) 1350 return (ENOENT); 1351 1352 indx++; |
1353 if (oid->oid_kind & CTLFLAG_NOLOCK) 1354 req->lock = REQ_UNLOCKED; | |
1355 if ((oid->oid_kind & CTLTYPE) == CTLTYPE_NODE) { 1356 if (oid->oid_handler != NULL || indx == namelen) { 1357 *noid = oid; 1358 if (nindx != NULL) 1359 *nindx = indx; 1360 KASSERT((oid->oid_kind & CTLFLAG_DYING) == 0, 1361 ("%s found DYING node %p", __func__, oid)); 1362 return (0); --- 180 unchanged lines hidden (view full) --- 1543 if (!useracc(new, newlen, VM_PROT_READ)) 1544 return (EFAULT); 1545 req.newlen = newlen; 1546 req.newptr = new; 1547 } 1548 1549 req.oldfunc = sysctl_old_user; 1550 req.newfunc = sysctl_new_user; | 1353 if ((oid->oid_kind & CTLTYPE) == CTLTYPE_NODE) { 1354 if (oid->oid_handler != NULL || indx == namelen) { 1355 *noid = oid; 1356 if (nindx != NULL) 1357 *nindx = indx; 1358 KASSERT((oid->oid_kind & CTLFLAG_DYING) == 0, 1359 ("%s found DYING node %p", __func__, oid)); 1360 return (0); --- 180 unchanged lines hidden (view full) --- 1541 if (!useracc(new, newlen, VM_PROT_READ)) 1542 return (EFAULT); 1543 req.newlen = newlen; 1544 req.newptr = new; 1545 } 1546 1547 req.oldfunc = sysctl_old_user; 1548 req.newfunc = sysctl_new_user; |
1551 req.lock = REQ_LOCKED; | 1549 req.lock = REQ_UNWIRED; |
1552 1553#ifdef KTRACE 1554 if (KTRPOINT(curthread, KTR_SYSCTL)) 1555 ktrsysctl(name, namelen); 1556#endif 1557 1558 if (req.oldlen > PAGE_SIZE) { 1559 memlocked = 1; --- 61 unchanged lines hidden --- | 1550 1551#ifdef KTRACE 1552 if (KTRPOINT(curthread, KTR_SYSCTL)) 1553 ktrsysctl(name, namelen); 1554#endif 1555 1556 if (req.oldlen > PAGE_SIZE) { 1557 memlocked = 1; --- 61 unchanged lines hidden --- |