mmap.2: srcfix: rewrap source lines

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
This commit is contained in:
Michael Kerrisk 2017-12-18 17:55:51 +01:00
parent 04bb0b991d
commit e2da344f74
1 changed files with 17 additions and 14 deletions

View File

@ -214,7 +214,8 @@ as a hint: place the mapping at exactly that address.
.I addr
must be suitably aligned: for most architectures a multiple of page
size is sufficient; however, some architectures may impose additional
restrictions. If the memory region specified by
restrictions.
If the memory region specified by
.I addr
and
.I len
@ -223,29 +224,31 @@ part of the existing mapping(s) will be discarded.
If the specified address cannot be used,
.BR mmap ()
will fail.
Software that aspires to be portable should use this option with care, keeping
in mind that the exact layout of a process' memory map is allowed to change
significantly between kernel versions, C library versions, and operating system
releases.
Software that aspires to be portable should use this option with care,
keeping in mind that the exact layout of a process' memory map
is allowed to change significantly between kernel versions,
C library versions, and operating system releases.
.IP
Furthermore, this option is extremely hazardous (when used on its own), because
it forcibly removes pre-existing mappings, making it easy for a multi-threaded
process to corrupt its own address space.
Furthermore, this option is extremely hazardous (when used on its own),
because it forcibly removes pre-existing mappings,
making it easy for a multi-threaded process to corrupt its own address space.
.IP
For example, thread A looks through
.I /proc/<pid>/maps
and locates an available
address range, while thread B simultaneously acquires part or all of that same
address range. Thread A then calls mmap(MAP_FIXED), effectively overwriting
and locates an available address range,
while thread B simultaneously acquires part or all of that same
address range.
A then calls mmap(MAP_FIXED), effectively overwriting
the mapping that thread B created.
.IP
Thread B need not create a mapping directly; simply making a library call
that, internally, uses
.I dlopen(3)
to load some other shared library, will
suffice. The dlopen(3) call will map the library into the process's address
space. Furthermore, almost any library call may be implemented using this
technique.
suffice.
The dlopen(3) call will map the library into the process's address
space.
Furthermore, almost any library call may be implemented using this technique.
Examples include brk(2), malloc(3), pthread_create(3), and the PAM libraries
(http://www.linux-pam.org).
.IP