diff --git a/man2/mmap.2 b/man2/mmap.2 index 400cfda2d..804335eaf 100644 --- a/man2/mmap.2 +++ b/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//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