summaryrefslogtreecommitdiffstats
path: root/man2/personality.2
diff options
context:
space:
mode:
Diffstat (limited to 'man2/personality.2')
-rw-r--r--man2/personality.2296
1 files changed, 296 insertions, 0 deletions
diff --git a/man2/personality.2 b/man2/personality.2
new file mode 100644
index 0000000..e76af79
--- /dev/null
+++ b/man2/personality.2
@@ -0,0 +1,296 @@
+.\" Copyright (C) 1995, Thomas K. Dyas <tdyas@eden.rutgers.edu>
+.\" and Copyright (C) 2016, Michael Kerrisk <mtk.manpages@gmail.com>
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.\" Created Sat Aug 21 1995 Thomas K. Dyas <tdyas@eden.rutgers.edu>
+.\"
+.\" typo corrected, aeb, 950825
+.\" added layout change from joey, 960722
+.\" changed prototype, documented 0xffffffff, aeb, 030101
+.\" Modified 2004-11-03 patch from Martin Schulze <joey@infodrom.org>
+.\"
+.TH personality 2 2023-04-29 "Linux man-pages 6.05.01"
+.SH NAME
+personality \- set the process execution domain
+.SH LIBRARY
+Standard C library
+.RI ( libc ", " \-lc )
+.SH SYNOPSIS
+.nf
+.B #include <sys/personality.h>
+.PP
+.BI "int personality(unsigned long " persona );
+.fi
+.SH DESCRIPTION
+Linux supports different execution domains, or personalities, for each
+process.
+Among other things, execution domains tell Linux how to map
+signal numbers into signal actions.
+The execution domain system allows
+Linux to provide limited support for binaries compiled under other
+UNIX-like operating systems.
+.PP
+If
+.I persona
+is not
+0xffffffff, then
+.BR personality ()
+sets the caller's execution domain to the value specified by
+.IR persona .
+Specifying
+.I persona
+as 0xffffffff provides a way of retrieving
+the current persona without changing it.
+.PP
+A list of the available execution domains can be found in
+.IR <sys/personality.h> .
+The execution domain is a 32-bit value in which the top three
+bytes are set aside for flags that cause the kernel to modify the
+behavior of certain system calls so as to emulate historical or
+architectural quirks.
+The least significant byte is a value defining the personality
+the kernel should assume.
+The flag values are as follows:
+.TP
+.BR ADDR_COMPAT_LAYOUT " (since Linux 2.6.9)"
+With this flag set, provide legacy virtual address space layout.
+.TP
+.BR ADDR_NO_RANDOMIZE " (since Linux 2.6.12)"
+With this flag set, disable address-space-layout randomization.
+.TP
+.BR ADDR_LIMIT_32BIT " (since Linux 2.2)"
+Limit the address space to 32 bits.
+.TP
+.BR ADDR_LIMIT_3GB " (since Linux 2.4.0)"
+With this flag set, use 0xc0000000 as the offset at which to search
+a virtual memory chunk on
+.BR mmap (2);
+otherwise use 0xffffe000.
+Applies to 32-bit x86 processes only.
+.TP
+.BR FDPIC_FUNCPTRS " (since Linux 2.6.11)"
+User-space function pointers to signal handlers point
+to descriptors.
+Applies only to ARM if BINFMT_ELF_FDPIC and SuperH.
+.TP
+.BR MMAP_PAGE_ZERO " (since Linux 2.4.0)"
+Map page 0 as read-only
+(to support binaries that depend on this SVr4 behavior).
+.TP
+.BR READ_IMPLIES_EXEC " (since Linux 2.6.8)"
+With this flag set,
+.B PROT_READ
+implies
+.B PROT_EXEC
+for
+.BR mmap (2).
+.TP
+.BR SHORT_INODE " (since Linux 2.4.0)"
+No effect.
+.TP
+.BR STICKY_TIMEOUTS " (since Linux 1.2.0)"
+With this flag set,
+.BR select (2),
+.BR pselect (2),
+and
+.BR ppoll (2)
+do not modify the returned timeout argument when
+interrupted by a signal handler.
+.TP
+.BR UNAME26 " (since Linux 3.1)"
+Have
+.BR uname (2)
+report a 2.6.(40+x) version number rather than a MAJOR.x version number.
+Added as a stopgap measure to support broken applications that
+could not handle the
+kernel version-numbering switch from Linux 2.6.x to Linux 3.x.
+.TP
+.BR WHOLE_SECONDS " (since Linux 1.2.0)"
+No effect.
+.PP
+The available execution domains are:
+.TP
+.BR PER_BSD " (since Linux 1.2.0)"
+BSD. (No effects.)
+.TP
+.BR PER_HPUX " (since Linux 2.4)"
+Support for 32-bit HP/UX.
+This support was never complete, and was dropped so that since Linux 4.0,
+this value has no effect.
+.TP
+.BR PER_IRIX32 " (since Linux 2.2)"
+IRIX 5 32-bit.
+Never fully functional; support dropped in Linux 2.6.27.
+Implies
+.BR STICKY_TIMEOUTS .
+.TP
+.BR PER_IRIX64 " (since Linux 2.2)"
+IRIX 6 64-bit.
+Implies
+.BR STICKY_TIMEOUTS ;
+otherwise no effect.
+.TP
+.BR PER_IRIXN32 " (since Linux 2.2)"
+IRIX 6 new 32-bit.
+Implies
+.BR STICKY_TIMEOUTS ;
+otherwise no effect.
+.TP
+.BR PER_ISCR4 " (since Linux 1.2.0)"
+Implies
+.BR STICKY_TIMEOUTS ;
+otherwise no effect.
+.TP
+.BR PER_LINUX " (since Linux 1.2.0)"
+Linux.
+.TP
+.BR PER_LINUX32 " (since Linux 2.2)"
+.BR uname (2)
+returns the name of the 32-bit architecture in the
+.I machine
+field ("i686" instead of "x86_64", &c.).
+.IP
+Under ia64 (Itanium), processes with this personality don't have the
+O_LARGEFILE
+.BR open (2)
+flag forced.
+.IP
+Under 64-bit ARM, setting this personality is forbidden if
+.BR execve (2)ing
+a 32-bit process would also be forbidden
+(cf. the allow_mismatched_32bit_el0 kernel parameter and
+.IR Documentation/arm64/asymmetric-32bit.rst ).
+.TP
+.BR PER_LINUX32_3GB " (since Linux 2.4)"
+Same as
+.BR PER_LINUX32 ,
+but implies
+.BR ADDR_LIMIT_3GB .
+.TP
+.BR PER_LINUX_32BIT " (since Linux 2.0)"
+Same as
+.BR PER_LINUX ,
+but implies
+.BR ADDR_LIMIT_32BIT .
+.TP
+.BR PER_LINUX_FDPIC " (since Linux 2.6.11)"
+Same as
+.BR PER_LINUX ,
+but implies
+.BR FDPIC_FUNCPTRS .
+.TP
+.BR PER_OSF4 " (since Linux 2.4)"
+OSF/1 v4.
+.\" commit 987f20a9dcce3989e48d87cff3952c095c994445
+No effect since Linux 6.1, which removed a.out binary support.
+Before, on alpha,
+.\" Following is from a comment in arch/alpha/kernel/osf_sys.c
+would clear top 32 bits of iov_len in the user's buffer for
+compatibility with old versions of OSF/1 where iov_len
+was defined as.
+.IR int .
+.TP
+.BR PER_OSR5 " (since Linux 2.4)"
+SCO OpenServer 5.
+Implies
+.B STICKY_TIMEOUTS
+and
+.BR WHOLE_SECONDS ;
+otherwise no effect.
+.TP
+.BR PER_RISCOS " (since Linux 2.3.7; macro since Linux 2.3.13)"
+Acorn RISC OS/Arthur (MIPS).
+No effect.
+.\" commit 125ec7b4e90cbae4eed5a7ff1ee479cc331dcf3c
+Up to Linux v4.0, would set the emulation altroot to
+.I /usr/gnemul/riscos
+(cf.\&
+.BR PER_SUNOS ,
+below).
+Before then, up to Linux 2.6.3, just Arthur emulation.
+.TP
+.BR PER_SCOSVR3 " (since Linux 1.2.0)"
+SCO UNIX System V Release 3.
+Same as
+.BR PER_OSR5 ,
+but also implies
+.BR SHORT_INODE .
+.TP
+.BR PER_SOLARIS " (since Linux 2.4)"
+Solaris.
+Implies
+.BR STICKY_TIMEOUTS ;
+otherwise no effect.
+.TP
+.BR PER_SUNOS " (since Linux 2.4.0)"
+Sun OS.
+Same as
+.BR PER_BSD ,
+but implies
+.BR STICKY_TIMEOUTS .
+Prior to Linux 2.6.26,
+diverted library and dynamic linker searches to
+.IR /usr/gnemul .
+Buggy, largely unmaintained, and almost entirely unused.
+.TP
+.BR PER_SVR3 " (since Linux 1.2.0)"
+AT&T UNIX System V Release 3.
+Implies
+.B STICKY_TIMEOUTS
+and
+.BR SHORT_INODE ;
+otherwise no effect.
+.TP
+.BR PER_SVR4 " (since Linux 1.2.0)"
+AT&T UNIX System V Release 4.
+Implies
+.B STICKY_TIMEOUTS
+and
+.BR MMAP_PAGE_ZERO ;
+otherwise no effect.
+.TP
+.BR PER_UW7 " (since Linux 2.4)"
+UnixWare 7.
+Implies
+.B STICKY_TIMEOUTS
+and
+.BR MMAP_PAGE_ZERO ;
+otherwise no effect.
+.TP
+.BR PER_WYSEV386 " (since Linux 1.2.0)"
+WYSE UNIX System V/386.
+Implies
+.B STICKY_TIMEOUTS
+and
+.BR SHORT_INODE ;
+otherwise no effect.
+.TP
+.BR PER_XENIX " (since Linux 1.2.0)"
+XENIX.
+Implies
+.B STICKY_TIMEOUTS
+and
+.BR SHORT_INODE ;
+otherwise no effect.
+.SH RETURN VALUE
+On success, the previous
+.I persona
+is returned.
+On error, \-1 is returned, and
+.I errno
+is set to indicate the error.
+.SH ERRORS
+.TP
+.B EINVAL
+The kernel was unable to change the personality.
+.SH STANDARDS
+Linux.
+.SH HISTORY
+Linux 1.1.20,
+.\" (and thus first in a stable kernel release with Linux 1.2.0)
+glibc 2.3.
+.\" personality wrapper first appeared in glibc 1.90,
+.\" <sys/personality.h> was added later in glibc 2.2.91.
+.SH SEE ALSO
+.BR setarch (8)