From 2d41eca319064de1fb319b27f3add267e4b6844a Mon Sep 17 00:00:00 2001 From: Michael Kerrisk Date: Sat, 30 Jan 2016 17:31:14 +0100 Subject: [PATCH] personality.2: Greatly expand, to add descriptions of personality domains. Signed-off-by: Michael Kerrisk --- man2/personality.2 | 190 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 189 insertions(+), 1 deletion(-) diff --git a/man2/personality.2 b/man2/personality.2 index 68b372084..6c7fb5fef 100644 --- a/man2/personality.2 +++ b/man2/personality.2 @@ -1,4 +1,5 @@ .\" Copyright (C) 1995, Thomas K. Dyas +.\" and Copyright (C) 2016, Michael Kerrisk .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this @@ -59,6 +60,192 @@ the current persona without changing it. A list of the available execution domains can be found in .IR . +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 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; +.TP +.BR FDPIC_FUNCPTRS " (since Linux 2.6.11)" +User-space function pointers to signal handlers point +(on certain architectures) to descriptors. +.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, +.BR PROT_READ +implies +.BR PROT_EXEC +for +.BR mmap (2). +.TP +.BR SHORT_INODE " (since Linux 2.4.0)" +No effects(?). +.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+ version number rather than a 3.x version number. +Added as a stopgap measure to support broken applications that +could not handle the kernel version-numbering switch from 2.6.x to 3.x. +.TP +.BR WHOLE_SECONDS " (since Linux 1.2.0)" +No effects(?). +.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 effects. +.TP +.BR PER_IRIXN32 " (since Linux 2.2)" +IRIX 6 new 32-bit. +Implies +.BR STICKY_TIMEOUTS ; +otherwise no effects. +.TP +.BR PER_ISCR4 " (since Linux 1.2.0)" +Implies +.BR STICKY_TIMEOUTS ; +otherwise no effects. +.TP +.BR PER_LINUX " (since Linux 1.2.0)" +Linux. +.TP +.BR PER_LINUX32 " (since Linux 2.2)" +[To be documented.] +.TP +.BR PER_LINUX32_3GB " (since Linux 2.4)" +Implies +.BR ADDR_LIMIT_3GB . +.TP +.BR PER_LINUX_32BIT " (since Linux 2.0)" +Implies +.BR ADDR_LIMIT_32BIT . +.TP +.BR PER_LINUX_FDPIC " (since Linux 2.6.11)" +Implies +.BR FDPIC_FUNCPTRS . +.TP +.BR PER_OSF4 " (since Linux 2.4)" +OSF/1 v4. +On alpha, +.\" Following is from a comment in arch/alpha/kernel/osf_sys.c +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)" +Implies +.BR STICKY_TIMEOUTS +and +.BR WHOLE_SECONDS ; +otherwise no effects. +.TP +.BR PER_RISCOS " (since Linux 2.2)" +[To be documented.] +.TP +.BR PER_SCOSVR3 " (since Linux 1.2.0)" +Implies +.BR STICKY_TIMEOUTS , +.BR WHOLE_SECONDS , +and +.BR SHORT_INODE ; +otherwise no effects. +.TP +.BR PER_SOLARIS " (since Linux 2.4)" +Implies +.BR STICKY_TIMEOUTS ; +otherwise no effects. +.TP +.BR PER_SUNOS " (since Linux 2.4.0)" +Implies +.BR STICKY_TIMEOUTS . +Divert library and dynamic linker searches to +.IR /usr/gnemul . +Buggy, largely unmaintained, and almost entirely unused; +support was removed in Linux 2.6.26. +.TP +.BR PER_SVR3 " (since Linux 1.2.0)" +Implies +.BR STICKY_TIMEOUTS +and +.BR SHORT_INODE ; +otherwise no effects. +.TP +.BR PER_SVR4 " (since Linux 1.2.0)" +Implies +.BR STICKY_TIMEOUTS +and +.BR MMAP_PAGE_ZERO ; +otherwise no effects. +.TP +.BR PER_UW7 " (since Linux 2.4)" +Implies +.BR STICKY_TIMEOUTS +and +.BR MMAP_PAGE_ZERO ; +otherwise no effects. +.TP +.BR PER_WYSEV386 " (since Linux 1.2.0)" +Implies +.BR STICKY_TIMEOUTS +and +.BR SHORT_INODE ; +otherwise no effects. +.TP +.BR PER_XENIX " (since Linux 1.2.0)" +Implies +.BR STICKY_TIMEOUTS +and +.BR SHORT_INODE ; +otherwise no effects. .SH RETURN VALUE On success, the previous .I persona @@ -71,7 +258,8 @@ is set appropriately. .B EINVAL The kernel was unable to change the personality. .SH VERSIONS -This system call first appeared in Linux 1.1.20; +This system call first appeared in Linux 1.1.20 +(and thus first in a stable kernel release with Linux 1.2.0); library support was added in glibc 2.3. .\" personality wrapper first appeared in glibc 1.90, .\" was added later in 2.2.91.