FreeBSD manual
download PDF document: kenv.2.pdf
KENV(2) FreeBSD System Calls Manual KENV(2)
NAME
kenv - kernel environment
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <kenv.h>
int
kenv(int action, const char *name, char *value, int len);
DESCRIPTION
The kenv() system call manipulates kernel environment variables. It
supports the well known userland actions of getting, setting and
unsetting environment variables, as well as the ability to dump all of
the entries in the kernel environment.
The action argument can be one of the following:
KENV_GET Get the value of the variable with the given name. The
size of the value buffer is given by len, which should
be at least KENV_MVALLEN + 1 bytes to avoid truncation
and to ensure NUL termination.
KENV_SET Set or add a variable. The name and value are limited
to KENV_MNAMELEN and KENV_MVALLEN characters,
respectively (not including the NUL terminator.) The
len argument indicates the length of the value and must
include the NUL terminator. This option is only
available to the superuser.
KENV_UNSET Unset the variable with the given name. The value and
len arguments are ignored. This option is only
available to the superuser.
KENV_DUMP Dump as much of the dynamic kernel environment as will
fit in value, whose size is given in len. If value is
NULL, kenv() will return the number of bytes required
to copy out the entire environment. The name is
ignored.
KENV_DUMP_LOADER Dump the static environment provided by loader(8), with
semantics identical to KENV_DUMP. Duplicate and
malformed variables originally present in this
environment are discarded by the kernel and will not
appear in the output.
KENV_DUMP_STATIC Dump the static environment defined by the kernel
config(5). The semantics are identical to
KENV_DUMP_LOADER.
RETURN VALUES
The kenv() system call returns 0 if successful in the case of KENV_SET
and KENV_UNSET, and the number of bytes copied into value in the case of
KENV_DUMP and KENV_GET. If an error occurs, a value of -1 is returned
and the global variable errno is set to indicate the error.
[ENOENT] No value could be found for name for a KENV_GET or
KENV_UNSET.
[ENOENT] The requested environment is not available for a
KENV_DUMP_LOADER or KENV_DUMP_STATIC. The kernel is
configured to destroy these environments by default.
[EPERM] A user other than the superuser attempted to set or
unset a kernel environment variable.
[EFAULT] A bad address was encountered while attempting to copy
in user arguments or copy out value(s).
[ENAMETOOLONG] The name or the value is longer than KENV_MNAMELEN or
KENV_MVALLEN characters, respectively, or len did not
include the NUL terminator for a KENV_SET.
SEE ALSO
kenv(1)
AUTHORS
This manual page was written by Chad David <davidc@FreeBSD.org>.
The kenv() system call was written by Maxime Henrion <mux@FreeBSD.org>.
FreeBSD 14.0-RELEASE-p11 June 20, 2021 FreeBSD 14.0-RELEASE-p11