38 #include <sys/cdefs.h>
41 #include "opt_compat.h"
42 #include "opt_posix.h"
43 #include "opt_config.h"
45 #include <sys/param.h>
46 #include <sys/kernel.h>
48 #include <sys/systm.h>
49 #include <sys/sysctl.h>
52 #include <sys/mutex.h>
56 #include <sys/unistd.h>
59 "Sysctl internal magic");
60 SYSCTL_NODE(, CTL_KERN, kern, CTLFLAG_RW|CTLFLAG_CAPRD, 0,
61 "High kernel, proc, limits &c");
67 "Network, (see socket.h)");
70 SYSCTL_NODE(_debug, OID_AUTO,
sizeof, CTLFLAG_RW, 0,
71 "Sizeof various things");
78 SYSCTL_NODE(, CTL_P1003_1B, p1003_1b, CTLFLAG_RW, 0,
79 "p1003_1b, (see p1003_1b.h)");
82 "Compatibility code");
87 "Regression test MIB");
90 SYSCTL_STRING(_kern, OID_AUTO, ident, CTLFLAG_RD|CTLFLAG_MPSAFE,
91 kern_ident, 0,
"Kernel identifier");
93 SYSCTL_STRING(_kern, KERN_OSRELEASE, osrelease, CTLFLAG_RD|CTLFLAG_MPSAFE|
94 CTLFLAG_CAPRD, osrelease, 0,
"Operating system release");
96 SYSCTL_INT(_kern, KERN_OSREV, osrevision, CTLFLAG_RD|CTLFLAG_CAPRD,
97 SYSCTL_NULL_INT_PTR, BSD,
"Operating system revision");
99 SYSCTL_STRING(_kern, KERN_VERSION, version, CTLFLAG_RD|CTLFLAG_MPSAFE,
100 version, 0,
"Kernel version");
102 SYSCTL_STRING(_kern, OID_AUTO, compiler_version, CTLFLAG_RD|CTLFLAG_MPSAFE,
103 compiler_version, 0,
"Version of compiler used to compile kernel");
105 SYSCTL_STRING(_kern, KERN_OSTYPE, ostype, CTLFLAG_RD|CTLFLAG_MPSAFE|
106 CTLFLAG_CAPRD, ostype, 0,
"Operating system type");
112 SYSCTL_INT(_kern, KERN_OSRELDATE, osreldate, CTLFLAG_RD|CTLFLAG_CAPRD,
113 &osreldate, 0,
"Kernel release date");
116 &
maxproc, 0,
"Maximum number of processes");
122 &
maxusers, 0,
"Hint for kernel tuning");
124 SYSCTL_INT(_kern, KERN_ARGMAX, argmax, CTLFLAG_RD|CTLFLAG_CAPRD,
125 SYSCTL_NULL_INT_PTR, ARG_MAX,
"Maximum bytes of argument to execve(2)");
127 SYSCTL_INT(_kern, KERN_POSIX1, posix1version, CTLFLAG_RD|CTLFLAG_CAPRD,
128 SYSCTL_NULL_INT_PTR, _POSIX_VERSION,
"Version of POSIX attempting to comply to");
130 SYSCTL_INT(_kern, KERN_NGROUPS, ngroups, CTLFLAG_RDTUN|CTLFLAG_CAPRD,
132 "Maximum number of supplemental groups a user can belong to");
134 SYSCTL_INT(_kern, KERN_JOB_CONTROL, job_control, CTLFLAG_RD|CTLFLAG_CAPRD,
135 SYSCTL_NULL_INT_PTR, 1,
"Whether job control is available");
137 #ifdef _POSIX_SAVED_IDS
138 SYSCTL_INT(_kern, KERN_SAVED_IDS, saved_ids, CTLFLAG_RD|CTLFLAG_CAPRD,
139 SYSCTL_NULL_INT_PTR, 1,
"Whether saved set-group/user ID is available");
141 SYSCTL_INT(_kern, KERN_SAVED_IDS, saved_ids, CTLFLAG_RD|CTLFLAG_CAPRD,
142 SYSCTL_NULL_INT_PTR, 0,
"Whether saved set-group/user ID is available");
150 SYSCTL_INT(_hw, HW_NCPU, ncpu, CTLFLAG_RD|CTLFLAG_CAPRD,
151 &
mp_ncpus, 0,
"Number of active CPUs");
153 SYSCTL_INT(_hw, HW_BYTEORDER, byteorder, CTLFLAG_RD|CTLFLAG_CAPRD,
154 SYSCTL_NULL_INT_PTR, BYTE_ORDER,
"System byte order");
156 SYSCTL_INT(_hw, HW_PAGESIZE, pagesize, CTLFLAG_RD|CTLFLAG_CAPRD,
157 SYSCTL_NULL_INT_PTR, PAGE_SIZE,
"System memory page size");
166 if (len >
sizeof(buf))
168 arc4rand(buf, len, 0);
169 return (SYSCTL_OUT(req, buf, len));
173 CTLTYPE_OPAQUE | CTLFLAG_RD | CTLFLAG_MPSAFE | CTLFLAG_CAPRD, NULL, 0,
185 SYSCTL_PROC(_hw, HW_PHYSMEM, physmem, CTLTYPE_ULONG | CTLFLAG_RD,
195 SYSCTL_PROC(_hw, HW_REALMEM, realmem, CTLTYPE_ULONG | CTLFLAG_RD,
202 val = ctob(physmem - cnt.v_wire_count);
206 SYSCTL_PROC(_hw, HW_USERMEM, usermem, CTLTYPE_ULONG | CTLFLAG_RD,
209 SYSCTL_LONG(_hw, OID_AUTO, availpages, CTLFLAG_RD, &physmem, 0,
"");
219 uint32_t pagesizes32[MAXPAGESIZES];
221 if (req->flags & SCTL_MASK32) {
226 for (i = 0; i < MAXPAGESIZES; i++)
229 error = SYSCTL_OUT(req, pagesizes32,
sizeof(pagesizes32));
239 int adaptive_machine_arch = 1;
240 SYSCTL_INT(_debug, OID_AUTO, adaptive_machine_arch, CTLFLAG_RW,
241 &adaptive_machine_arch, 1,
242 "Adapt reported machine architecture to the ABI of the binary");
249 static const char machine_arch[] = MACHINE_ARCH;
251 static const char machine_arch32[] = MACHINE_ARCH32;
253 if ((req->flags & SCTL_MASK32) != 0 && adaptive_machine_arch)
254 error = SYSCTL_OUT(req, machine_arch32,
sizeof(machine_arch32));
257 error = SYSCTL_OUT(req, machine_arch,
sizeof(machine_arch));
261 SYSCTL_PROC(_hw, HW_MACHINE_ARCH, machine_arch, CTLTYPE_STRING | CTLFLAG_RD,
264 SYSCTL_STRING(_kern, OID_AUTO, supported_archs, CTLFLAG_RD | CTLFLAG_MPSAFE,
266 MACHINE_ARCH
" " MACHINE_ARCH32, 0,
"Supported architectures for binaries");
268 MACHINE_ARCH, 0,
"Supported architectures for binaries");
274 struct prison *
pr, *cpr;
276 char tmpname[MAXHOSTNAMELEN];
277 int descend, error, len;
283 pr_offset = (size_t)arg1;
285 KASSERT(len <=
sizeof(tmpname),
286 (
"length %d too long for %s", len, __func__));
288 pr = req->td->td_ucred->cr_prison;
289 if (!(pr->pr_allow & PR_ALLOW_SET_HOSTNAME) && req->newptr)
295 mtx_lock(&pr->pr_mtx);
296 bcopy((
char *)pr + pr_offset, tmpname, len);
297 mtx_unlock(&pr->pr_mtx);
301 if (req->newptr != NULL && error == 0) {
307 while (!(pr->pr_flags & PR_HOST))
309 mtx_lock(&pr->pr_mtx);
310 bcopy(tmpname, (
char *)pr + pr_offset, len);
311 FOREACH_PRISON_DESCENDANT_LOCKED(pr, cpr, descend)
312 if (cpr->pr_flags & PR_HOST)
315 bcopy(tmpname, (
char *)cpr + pr_offset, len);
316 mtx_unlock(&pr->pr_mtx);
323 CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_PRISON | CTLFLAG_MPSAFE,
324 (
void *)(offsetof(
struct prison, pr_hostname)), MAXHOSTNAMELEN,
327 CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_PRISON | CTLFLAG_MPSAFE,
328 (
void *)(offsetof(
struct prison, pr_domainname)), MAXHOSTNAMELEN,
331 CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_PRISON | CTLFLAG_MPSAFE,
332 (
void *)(offsetof(
struct prison, pr_hostuuid)), HOSTUUIDLEN,
338 SYSCTL_INT(_regression, OID_AUTO, securelevel_nonmonotonic, CTLFLAG_RW,
339 ®ression_securelevel_nonmonotonic, 0,
"securelevel may be lowered");
345 struct prison *
pr, *cpr;
346 int descend, error,
level;
348 pr = req->td->td_ucred->cr_prison;
355 level = pr->pr_securelevel;
357 if (error || !req->newptr)
361 mtx_lock(&pr->pr_mtx);
362 if (!regression_securelevel_nonmonotonic &&
363 level < pr->pr_securelevel) {
364 mtx_unlock(&pr->pr_mtx);
368 pr->pr_securelevel =
level;
373 FOREACH_PRISON_DESCENDANT_LOCKED(pr, cpr, descend) {
374 if (cpr->pr_securelevel < level)
375 cpr->pr_securelevel =
level;
377 mtx_unlock(&pr->pr_mtx);
384 "I",
"Current secure level");
386 #ifdef INCLUDE_CONFIG_FILE
388 extern char kernconfstring[];
391 sysctl_kern_config(SYSCTL_HANDLER_ARGS)
394 strlen(kernconfstring), req));
397 SYSCTL_PROC(_kern, OID_AUTO, conftxt, CTLTYPE_STRING|CTLFLAG_RW,
398 0, 0, sysctl_kern_config,
"",
"Kernel configuration file");
404 struct prison *
pr, *cpr;
412 pr = req->td->td_ucred->cr_prison;
413 if (!(pr->pr_allow & PR_ALLOW_SET_HOSTNAME) && req->newptr)
415 tmpid = pr->pr_hostid;
418 if (req->newptr != NULL && error == 0) {
420 while (!(pr->pr_flags & PR_HOST))
422 mtx_lock(&pr->pr_mtx);
423 pr->pr_hostid = tmpid;
424 FOREACH_PRISON_DESCENDANT_LOCKED(pr, cpr, descend)
425 if (cpr->pr_flags & PR_HOST)
428 cpr->pr_hostid = tmpid;
429 mtx_unlock(&pr->pr_mtx);
436 CTLTYPE_ULONG | CTLFLAG_RW | CTLFLAG_PRISON | CTLFLAG_MPSAFE,
439 SYSCTL_NODE(_kern, OID_AUTO, features, CTLFLAG_RD, 0,
"Kernel Features");
441 #ifdef COMPAT_FREEBSD4
442 FEATURE(compat_freebsd4,
"Compatible with FreeBSD 4");
445 #ifdef COMPAT_FREEBSD5
446 FEATURE(compat_freebsd5,
"Compatible with FreeBSD 5");
449 #ifdef COMPAT_FREEBSD6
450 FEATURE(compat_freebsd6,
"Compatible with FreeBSD 6");
453 #ifdef COMPAT_FREEBSD7
454 FEATURE(compat_freebsd7,
"Compatible with FreeBSD 7");
465 "", 0,
"PATH that finds all the standard utilities");
466 SYSCTL_INT(_user, USER_BC_BASE_MAX, bc_base_max, CTLFLAG_RD,
467 SYSCTL_NULL_INT_PTR, 0,
"Max ibase/obase values in bc(1)");
468 SYSCTL_INT(_user, USER_BC_DIM_MAX, bc_dim_max, CTLFLAG_RD,
469 SYSCTL_NULL_INT_PTR, 0,
"Max array size in bc(1)");
470 SYSCTL_INT(_user, USER_BC_SCALE_MAX, bc_scale_max, CTLFLAG_RD,
471 SYSCTL_NULL_INT_PTR, 0,
"Max scale value in bc(1)");
472 SYSCTL_INT(_user, USER_BC_STRING_MAX, bc_string_max, CTLFLAG_RD,
473 SYSCTL_NULL_INT_PTR, 0,
"Max string length in bc(1)");
474 SYSCTL_INT(_user, USER_COLL_WEIGHTS_MAX, coll_weights_max, CTLFLAG_RD,
475 SYSCTL_NULL_INT_PTR, 0,
"Maximum number of weights assigned to an LC_COLLATE locale entry");
476 SYSCTL_INT(_user, USER_EXPR_NEST_MAX, expr_nest_max, CTLFLAG_RD,
477 SYSCTL_NULL_INT_PTR, 0,
"");
478 SYSCTL_INT(_user, USER_LINE_MAX, line_max, CTLFLAG_RD,
479 SYSCTL_NULL_INT_PTR, 0,
"Max length (bytes) of a text-processing utility's input line");
480 SYSCTL_INT(_user, USER_RE_DUP_MAX, re_dup_max, CTLFLAG_RD,
481 SYSCTL_NULL_INT_PTR, 0,
"Maximum number of repeats of a regexp permitted");
482 SYSCTL_INT(_user, USER_POSIX2_VERSION, posix2_version, CTLFLAG_RD,
483 SYSCTL_NULL_INT_PTR, 0,
484 "The version of POSIX 1003.2 with which the system attempts to comply");
485 SYSCTL_INT(_user, USER_POSIX2_C_BIND, posix2_c_bind, CTLFLAG_RD,
486 SYSCTL_NULL_INT_PTR, 0,
"Whether C development supports the C bindings option");
487 SYSCTL_INT(_user, USER_POSIX2_C_DEV, posix2_c_dev, CTLFLAG_RD,
488 SYSCTL_NULL_INT_PTR, 0,
"Whether system supports the C development utilities option");
489 SYSCTL_INT(_user, USER_POSIX2_CHAR_TERM, posix2_char_term, CTLFLAG_RD,
490 SYSCTL_NULL_INT_PTR, 0,
"");
491 SYSCTL_INT(_user, USER_POSIX2_FORT_DEV, posix2_fort_dev, CTLFLAG_RD,
492 SYSCTL_NULL_INT_PTR, 0,
"Whether system supports FORTRAN development utilities");
493 SYSCTL_INT(_user, USER_POSIX2_FORT_RUN, posix2_fort_run, CTLFLAG_RD,
494 SYSCTL_NULL_INT_PTR, 0,
"Whether system supports FORTRAN runtime utilities");
495 SYSCTL_INT(_user, USER_POSIX2_LOCALEDEF, posix2_localedef, CTLFLAG_RD,
496 SYSCTL_NULL_INT_PTR, 0,
"Whether system supports creation of locales");
497 SYSCTL_INT(_user, USER_POSIX2_SW_DEV, posix2_sw_dev, CTLFLAG_RD,
498 SYSCTL_NULL_INT_PTR, 0,
"Whether system supports software development utilities");
499 SYSCTL_INT(_user, USER_POSIX2_UPE, posix2_upe, CTLFLAG_RD,
500 SYSCTL_NULL_INT_PTR, 0,
"Whether system supports the user portability utilities");
501 SYSCTL_INT(_user, USER_STREAM_MAX, stream_max, CTLFLAG_RD,
502 SYSCTL_NULL_INT_PTR, 0,
"Min Maximum number of streams a process may have open at one time");
503 SYSCTL_INT(_user, USER_TZNAME_MAX, tzname_max, CTLFLAG_RD,
504 SYSCTL_NULL_INT_PTR, 0,
"Min Maximum number of types supported for timezone names");
506 #include <sys/vnode.h>
507 SYSCTL_INT(_debug_sizeof, OID_AUTO, vnode, CTLFLAG_RD,
508 SYSCTL_NULL_INT_PTR,
sizeof(
struct vnode),
"sizeof(struct vnode)");
510 SYSCTL_INT(_debug_sizeof, OID_AUTO, proc, CTLFLAG_RD,
511 SYSCTL_NULL_INT_PTR,
sizeof(
struct proc),
"sizeof(struct proc)");
520 if (error || !req->newptr)
529 if (pm < 300 || pm > PID_MAX)
539 "Maximum allowed pid");
543 SYSCTL_INT(_debug_sizeof, OID_AUTO, bio, CTLFLAG_RD,
544 SYSCTL_NULL_INT_PTR,
sizeof(
struct bio),
"sizeof(struct bio)");
546 SYSCTL_NULL_INT_PTR,
sizeof(
struct buf),
"sizeof(struct buf)");
548 #include <sys/user.h>
549 SYSCTL_INT(_debug_sizeof, OID_AUTO, kinfo_proc, CTLFLAG_RD,
550 SYSCTL_NULL_INT_PTR,
sizeof(
struct kinfo_proc),
"sizeof(struct kinfo_proc)");
553 #include <sys/imgact.h>
554 #include <sys/imgact_elf.h>
555 SYSCTL_INT(_kern, OID_AUTO, fallback_elf_brand, CTLFLAG_RW,
556 &
__elfN(fallback_brand),
sizeof(
__elfN(fallback_brand)),
557 "compatibility for kern.fallback_elf_brand");
static int sysctl_kern_securelvl(SYSCTL_HANDLER_ARGS)
char kernelname[MAXPATHLEN]
SYSCTL_STRING(_kern, OID_AUTO, ident, CTLFLAG_RD|CTLFLAG_MPSAFE, kern_ident, 0,"Kernel identifier")
SYSCTL_NODE(, 0, sysctl, CTLFLAG_RW, 0,"Sysctl internal magic")
static int sysctl_hw_physmem(SYSCTL_HANDLER_ARGS)
static int regression_securelevel_nonmonotonic
static int sysctl_hostid(SYSCTL_HANDLER_ARGS)
int sysctl_handle_string(SYSCTL_HANDLER_ARGS)
u_long pagesizes[MAXPAGESIZES]
int sysctl_handle_int(SYSCTL_HANDLER_ARGS)
SYSCTL_LONG(_hw, OID_AUTO, availpages, CTLFLAG_RD,&physmem, 0,"")
static int sysctl_hostname(SYSCTL_HANDLER_ARGS)
Elf_Brandnote __elfN(kbsdsunix_brandnote)
static int sysctl_kern_pid_max(SYSCTL_HANDLER_ARGS)
static int sysctl_hw_machine_arch(SYSCTL_HANDLER_ARGS)
static int sysctl_kern_arnd(SYSCTL_HANDLER_ARGS)
static int sysctl_hw_realmem(SYSCTL_HANDLER_ARGS)
static int sysctl_hw_usermem(SYSCTL_HANDLER_ARGS)
static int sysctl_hw_pagesizes(SYSCTL_HANDLER_ARGS)
FEATURE(kdtrace_hooks,"Kernel DTrace hooks which are required to load DTrace kernel modules")
int sysctl_handle_long(SYSCTL_HANDLER_ARGS)
SYSCTL_INT(_kern, KERN_OSREV, osrevision, CTLFLAG_RD|CTLFLAG_CAPRD, SYSCTL_NULL_INT_PTR, BSD,"Operating system revision")
static struct pollrec pr[POLL_LIST_LEN]
SYSCTL_PROC(_kern, KERN_ARND, arandom, CTLTYPE_OPAQUE|CTLFLAG_RD|CTLFLAG_MPSAFE|CTLFLAG_CAPRD, NULL, 0, sysctl_kern_arnd,"","arc4rand")
const struct cf_level * level