mirror of https://github.com/mkerrisk/man-pages
mmap.2: srcfix: rewrap source lines
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
This commit is contained in:
parent
04bb0b991d
commit
e2da344f74
31
man2/mmap.2
31
man2/mmap.2
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue