1MMAP(2) Linux Programmer's Manual MMAP(2)
2
3
4
6 mmap, munmap - map or unmap files or devices into memory
7
9 #include <sys/mman.h>
10
11 void *mmap(void *addr, size_t length, int prot, int flags,
12 int fd, off_t offset);
13 int munmap(void *addr, size_t length);
14
15 See NOTES for information on feature test macro requirements.
16
18 mmap() creates a new mapping in the virtual address space of the call‐
19 ing process. The starting address for the new mapping is specified in
20 addr. The length argument specifies the length of the mapping (which
21 must be greater than 0).
22
23 If addr is NULL, then the kernel chooses the (page-aligned) address at
24 which to create the mapping; this is the most portable method of creat‐
25 ing a new mapping. If addr is not NULL, then the kernel takes it as a
26 hint about where to place the mapping; on Linux, the kernel will pick a
27 nearby page boundary (but always above or equal to the value specified
28 by /proc/sys/vm/mmap_min_addr) and attempt to create the mapping there.
29 If another mapping already exists there, the kernel picks a new address
30 that may or may not depend on the hint. The address of the new mapping
31 is returned as the result of the call.
32
33 The contents of a file mapping (as opposed to an anonymous mapping; see
34 MAP_ANONYMOUS below), are initialized using length bytes starting at
35 offset offset in the file (or other object) referred to by the file
36 descriptor fd. offset must be a multiple of the page size as returned
37 by sysconf(_SC_PAGE_SIZE).
38
39 After the mmap() call has returned, the file descriptor, fd, can be
40 closed immediately without invalidating the mapping.
41
42 The prot argument describes the desired memory protection of the map‐
43 ping (and must not conflict with the open mode of the file). It is
44 either PROT_NONE or the bitwise OR of one or more of the following
45 flags:
46
47 PROT_EXEC Pages may be executed.
48
49 PROT_READ Pages may be read.
50
51 PROT_WRITE Pages may be written.
52
53 PROT_NONE Pages may not be accessed.
54
55 The flags argument determines whether updates to the mapping are visi‐
56 ble to other processes mapping the same region, and whether updates are
57 carried through to the underlying file. This behavior is determined by
58 including exactly one of the following values in flags:
59
60 MAP_SHARED
61 Share this mapping. Updates to the mapping are visible to other
62 processes mapping the same region, and (in the case of file-
63 backed mappings) are carried through to the underlying file.
64 (To precisely control when updates are carried through to the
65 underlying file requires the use of msync(2).)
66
67 MAP_SHARED_VALIDATE (since Linux 4.15)
68 This flag provides the same behavior as MAP_SHARED except that
69 MAP_SHARED mappings ignore unknown flags in flags. By contrast,
70 when creating a mapping using MAP_SHARED_VALIDATE, the kernel
71 verifies all passed flags are known and fails the mapping with
72 the error EOPNOTSUPP for unknown flags. This mapping type is
73 also required to be able to use some mapping flags (e.g.,
74 MAP_SYNC).
75
76 MAP_PRIVATE
77 Create a private copy-on-write mapping. Updates to the mapping
78 are not visible to other processes mapping the same file, and
79 are not carried through to the underlying file. It is unspeci‐
80 fied whether changes made to the file after the mmap() call are
81 visible in the mapped region.
82
83 Both MAP_SHARED and MAP_PRIVATE are described in POSIX.1-2001 and
84 POSIX.1-2008. MAP_SHARED_VALIDATE is a Linux extension.
85
86 In addition, zero or more of the following values can be ORed in flags:
87
88 MAP_32BIT (since Linux 2.4.20, 2.6)
89 Put the mapping into the first 2 Gigabytes of the process
90 address space. This flag is supported only on x86-64, for
91 64-bit programs. It was added to allow thread stacks to be
92 allocated somewhere in the first 2 GB of memory, so as to
93 improve context-switch performance on some early 64-bit proces‐
94 sors. Modern x86-64 processors no longer have this performance
95 problem, so use of this flag is not required on those systems.
96 The MAP_32BIT flag is ignored when MAP_FIXED is set.
97
98 MAP_ANON
99 Synonym for MAP_ANONYMOUS. Deprecated.
100
101 MAP_ANONYMOUS
102 The mapping is not backed by any file; its contents are initial‐
103 ized to zero. The fd argument is ignored; however, some imple‐
104 mentations require fd to be -1 if MAP_ANONYMOUS (or MAP_ANON) is
105 specified, and portable applications should ensure this. The
106 offset argument should be zero. The use of MAP_ANONYMOUS in
107 conjunction with MAP_SHARED is supported on Linux only since
108 kernel 2.4.
109
110 MAP_DENYWRITE
111 This flag is ignored. (Long ago—Linux 2.0 and earlier—it sig‐
112 naled that attempts to write to the underlying file should fail
113 with ETXTBUSY. But this was a source of denial-of-service
114 attacks.)
115
116 MAP_EXECUTABLE
117 This flag is ignored.
118
119 MAP_FILE
120 Compatibility flag. Ignored.
121
122 MAP_FIXED
123 Don't interpret addr as a hint: place the mapping at exactly
124 that address. addr must be suitably aligned: for most architec‐
125 tures a multiple of the page size is sufficient; however, some
126 architectures may impose additional restrictions. If the memory
127 region specified by addr and len overlaps pages of any existing
128 mapping(s), then the overlapped part of the existing mapping(s)
129 will be discarded. If the specified address cannot be used,
130 mmap() will fail.
131
132 Software that aspires to be portable should use the MAP_FIXED
133 flag with care, keeping in mind that the exact layout of a
134 process's memory mappings is allowed to change significantly
135 between kernel versions, C library versions, and operating sys‐
136 tem releases. Carefully read the discussion of this flag in
137 NOTES!
138
139 MAP_FIXED_NOREPLACE (since Linux 4.17)
140 This flag provides behavior that is similar to MAP_FIXED with
141 respect to the addr enforcement, but differs in that
142 MAP_FIXED_NOREPLACE never clobbers a preexisting mapped range.
143 If the requested range would collide with an existing mapping,
144 then this call fails with the error EEXIST. This flag can
145 therefore be used as a way to atomically (with respect to other
146 threads) attempt to map an address range: one thread will suc‐
147 ceed; all others will report failure.
148
149 Note that older kernels which do not recognize the
150 MAP_FIXED_NOREPLACE flag will typically (upon detecting a colli‐
151 sion with a preexisting mapping) fall back to a "non-MAP_FIXED"
152 type of behavior: they will return an address that is different
153 from the requested address. Therefore, backward-compatible
154 software should check the returned address against the requested
155 address.
156
157 MAP_GROWSDOWN
158 This flag is used for stacks. It indicates to the kernel vir‐
159 tual memory system that the mapping should extend downward in
160 memory. The return address is one page lower than the memory
161 area that is actually created in the process's virtual address
162 space. Touching an address in the "guard" page below the map‐
163 ping will cause the mapping to grow by a page. This growth can
164 be repeated until the mapping grows to within a page of the high
165 end of the next lower mapping, at which point touching the
166 "guard" page will result in a SIGSEGV signal.
167
168 MAP_HUGETLB (since Linux 2.6.32)
169 Allocate the mapping using "huge pages." See the Linux kernel
170 source file Documentation/admin-guide/mm/hugetlbpage.rst for
171 further information, as well as NOTES, below.
172
173 MAP_HUGE_2MB, MAP_HUGE_1GB (since Linux 3.8)
174 Used in conjunction with MAP_HUGETLB to select alternative
175 hugetlb page sizes (respectively, 2 MB and 1 GB) on systems that
176 support multiple hugetlb page sizes.
177
178 More generally, the desired huge page size can be configured by
179 encoding the base-2 logarithm of the desired page size in the
180 six bits at the offset MAP_HUGE_SHIFT. (A value of zero in this
181 bit field provides the default huge page size; the default huge
182 page size can be discovered via the Hugepagesize field exposed
183 by /proc/meminfo.) Thus, the above two constants are defined
184 as:
185
186 #define MAP_HUGE_2MB (21 << MAP_HUGE_SHIFT)
187 #define MAP_HUGE_1GB (30 << MAP_HUGE_SHIFT)
188
189 The range of huge page sizes that are supported by the system
190 can be discovered by listing the subdirectories in /sys/ker‐
191 nel/mm/hugepages.
192
193 MAP_LOCKED (since Linux 2.5.37)
194 Mark the mapped region to be locked in the same way as mlock(2).
195 This implementation will try to populate (prefault) the whole
196 range but the mmap() call doesn't fail with ENOMEM if this
197 fails. Therefore major faults might happen later on. So the
198 semantic is not as strong as mlock(2). One should use mmap()
199 plus mlock(2) when major faults are not acceptable after the
200 initialization of the mapping. The MAP_LOCKED flag is ignored
201 in older kernels.
202
203 MAP_NONBLOCK (since Linux 2.5.46)
204 This flag is meaningful only in conjunction with MAP_POPULATE.
205 Don't perform read-ahead: create page tables entries only for
206 pages that are already present in RAM. Since Linux 2.6.23, this
207 flag causes MAP_POPULATE to do nothing. One day, the combina‐
208 tion of MAP_POPULATE and MAP_NONBLOCK may be reimplemented.
209
210 MAP_NORESERVE
211 Do not reserve swap space for this mapping. When swap space is
212 reserved, one has the guarantee that it is possible to modify
213 the mapping. When swap space is not reserved one might get
214 SIGSEGV upon a write if no physical memory is available. See
215 also the discussion of the file /proc/sys/vm/overcommit_memory
216 in proc(5). In kernels before 2.6, this flag had effect only
217 for private writable mappings.
218
219 MAP_POPULATE (since Linux 2.5.46)
220 Populate (prefault) page tables for a mapping. For a file map‐
221 ping, this causes read-ahead on the file. This will help to
222 reduce blocking on page faults later. MAP_POPULATE is supported
223 for private mappings only since Linux 2.6.23.
224
225 MAP_STACK (since Linux 2.6.27)
226 Allocate the mapping at an address suitable for a process or
227 thread stack. This flag is currently a no-op, but is used in
228 the glibc threading implementation so that if some architectures
229 require special treatment for stack allocations, support can
230 later be transparently implemented for glibc.
231
232 MAP_SYNC (since Linux 4.15)
233 This flag is available only with the MAP_SHARED_VALIDATE mapping
234 type; mappings of type MAP_SHARED will silently ignore this
235 flag. This flag is supported only for files supporting DAX
236 (direct mapping of persistent memory). For other files, creat‐
237 ing a mapping with this flag results in an EOPNOTSUPP error.
238
239 Shared file mappings with this flag provide the guarantee that
240 while some memory is writably mapped in the address space of the
241 process, it will be visible in the same file at the same offset
242 even after the system crashes or is rebooted. In conjunction
243 with the use of appropriate CPU instructions, this provides
244 users of such mappings with a more efficient way of making data
245 modifications persistent.
246
247 MAP_UNINITIALIZED (since Linux 2.6.33)
248 Don't clear anonymous pages. This flag is intended to improve
249 performance on embedded devices. This flag is honored only if
250 the kernel was configured with the CONFIG_MMAP_ALLOW_UNINITIAL‐
251 IZED option. Because of the security implications, that option
252 is normally enabled only on embedded devices (i.e., devices
253 where one has complete control of the contents of user memory).
254
255 Of the above flags, only MAP_FIXED is specified in POSIX.1-2001 and
256 POSIX.1-2008. However, most systems also support MAP_ANONYMOUS (or its
257 synonym MAP_ANON).
258
259 Memory mapped by mmap() is preserved across fork(2), with the same
260 attributes.
261
262 A file is mapped in multiples of the page size. For a file that is not
263 a multiple of the page size, the remaining memory is zeroed when
264 mapped, and writes to that region are not written out to the file. The
265 effect of changing the size of the underlying file of a mapping on the
266 pages that correspond to added or removed regions of the file is
267 unspecified.
268
269 munmap()
270 The munmap() system call deletes the mappings for the specified address
271 range, and causes further references to addresses within the range to
272 generate invalid memory references. The region is also automatically
273 unmapped when the process is terminated. On the other hand, closing
274 the file descriptor does not unmap the region.
275
276 The address addr must be a multiple of the page size (but length need
277 not be). All pages containing a part of the indicated range are
278 unmapped, and subsequent references to these pages will generate
279 SIGSEGV. It is not an error if the indicated range does not contain
280 any mapped pages.
281
283 On success, mmap() returns a pointer to the mapped area. On error, the
284 value MAP_FAILED (that is, (void *) -1) is returned, and errno is set
285 to indicate the cause of the error.
286
287 On success, munmap() returns 0. On failure, it returns -1, and errno
288 is set to indicate the cause of the error (probably to EINVAL).
289
291 EACCES A file descriptor refers to a non-regular file. Or a file map‐
292 ping was requested, but fd is not open for reading. Or
293 MAP_SHARED was requested and PROT_WRITE is set, but fd is not
294 open in read/write (O_RDWR) mode. Or PROT_WRITE is set, but the
295 file is append-only.
296
297 EAGAIN The file has been locked, or too much memory has been locked
298 (see setrlimit(2)).
299
300 EBADF fd is not a valid file descriptor (and MAP_ANONYMOUS was not
301 set).
302
303 EEXIST MAP_FIXED_NOREPLACE was specified in flags, and the range cov‐
304 ered by addr and length clashes with an existing mapping.
305
306 EINVAL We don't like addr, length, or offset (e.g., they are too large,
307 or not aligned on a page boundary).
308
309 EINVAL (since Linux 2.6.12) length was 0.
310
311 EINVAL flags contained neither MAP_PRIVATE or MAP_SHARED, or contained
312 both of these values.
313
314 ENFILE The system-wide limit on the total number of open files has been
315 reached.
316
317 ENODEV The underlying filesystem of the specified file does not support
318 memory mapping.
319
320 ENOMEM No memory is available.
321
322 ENOMEM The process's maximum number of mappings would have been
323 exceeded. This error can also occur for munmap(), when unmap‐
324 ping a region in the middle of an existing mapping, since this
325 results in two smaller mappings on either side of the region
326 being unmapped.
327
328 ENOMEM (since Linux 4.7) The process's RLIMIT_DATA limit, described in
329 getrlimit(2), would have been exceeded.
330
331 EOVERFLOW
332 On 32-bit architecture together with the large file extension
333 (i.e., using 64-bit off_t): the number of pages used for length
334 plus number of pages used for offset would overflow unsigned
335 long (32 bits).
336
337 EPERM The prot argument asks for PROT_EXEC but the mapped area belongs
338 to a file on a filesystem that was mounted no-exec.
339
340 EPERM The operation was prevented by a file seal; see fcntl(2).
341
342 ETXTBSY
343 MAP_DENYWRITE was set but the object specified by fd is open for
344 writing.
345
346 Use of a mapped region can result in these signals:
347
348 SIGSEGV
349 Attempted write into a region mapped as read-only.
350
351 SIGBUS Attempted access to a portion of the buffer that does not corre‐
352 spond to the file (for example, beyond the end of the file,
353 including the case where another process has truncated the
354 file).
355
357 For an explanation of the terms used in this section, see
358 attributes(7).
359
360 ┌───────────────────┬───────────────┬─────────┐
361 │Interface │ Attribute │ Value │
362 ├───────────────────┼───────────────┼─────────┤
363 │mmap(), munmap() │ Thread safety │ MT-Safe │
364 └───────────────────┴───────────────┴─────────┘
366 POSIX.1-2001, POSIX.1-2008, SVr4, 4.4BSD.
367
369 On POSIX systems on which mmap(), msync(2), and munmap() are available,
370 _POSIX_MAPPED_FILES is defined in <unistd.h> to a value greater than 0.
371 (See also sysconf(3).)
372
374 On some hardware architectures (e.g., i386), PROT_WRITE implies
375 PROT_READ. It is architecture dependent whether PROT_READ implies
376 PROT_EXEC or not. Portable programs should always set PROT_EXEC if
377 they intend to execute code in the new mapping.
378
379 The portable way to create a mapping is to specify addr as 0 (NULL),
380 and omit MAP_FIXED from flags. In this case, the system chooses the
381 address for the mapping; the address is chosen so as not to conflict
382 with any existing mapping, and will not be 0. If the MAP_FIXED flag is
383 specified, and addr is 0 (NULL), then the mapped address will be 0
384 (NULL).
385
386 Certain flags constants are defined only if suitable feature test
387 macros are defined (possibly by default): _DEFAULT_SOURCE with glibc
388 2.19 or later; or _BSD_SOURCE or _SVID_SOURCE in glibc 2.19 and ear‐
389 lier. (Employing _GNU_SOURCE also suffices, and requiring that macro
390 specifically would have been more logical, since these flags are all
391 Linux-specific.) The relevant flags are: MAP_32BIT, MAP_ANONYMOUS (and
392 the synonym MAP_ANON), MAP_DENYWRITE, MAP_EXECUTABLE, MAP_FILE,
393 MAP_GROWSDOWN, MAP_HUGETLB, MAP_LOCKED, MAP_NONBLOCK, MAP_NORESERVE,
394 MAP_POPULATE, and MAP_STACK.
395
396 An application can determine which pages of a mapping are currently
397 resident in the buffer/page cache using mincore(2).
398
399 Using MAP_FIXED safely
400 The only safe use for MAP_FIXED is where the address range specified by
401 addr and length was previously reserved using another mapping; other‐
402 wise, the use of MAP_FIXED is hazardous because it forcibly removes
403 preexisting mappings, making it easy for a multithreaded process to
404 corrupt its own address space.
405
406 For example, suppose that thread A looks through /proc/<pid>/maps and
407 in order to locate an unused address range that it can map using
408 MAP_FIXED, while thread B simultaneously acquires part or all of that
409 same address range. When thread A subsequently employs
410 mmap(MAP_FIXED), it will effectively clobber the mapping that thread B
411 created. In this scenario, thread B need not create a mapping
412 directly; simply making a library call that, internally, uses dlopen(3)
413 to load some other shared library, will suffice. The dlopen(3) call
414 will map the library into the process's address space. Furthermore,
415 almost any library call may be implemented in a way that adds memory
416 mappings to the address space, either with this technique, or by simply
417 allocating memory. Examples include brk(2), malloc(3), pthread_cre‐
418 ate(3), and the PAM libraries ⟨http://www.linux-pam.org⟩.
419
420 Since Linux 4.17, a multithreaded program can use the MAP_FIXED_NORE‐
421 PLACE flag to avoid the hazard described above when attempting to cre‐
422 ate a mapping at a fixed address that has not been reserved by a preex‐
423 isting mapping.
424
425 Timestamps changes for file-backed mappings
426 For file-backed mappings, the st_atime field for the mapped file may be
427 updated at any time between the mmap() and the corresponding unmapping;
428 the first reference to a mapped page will update the field if it has
429 not been already.
430
431 The st_ctime and st_mtime field for a file mapped with PROT_WRITE and
432 MAP_SHARED will be updated after a write to the mapped region, and
433 before a subsequent msync(2) with the MS_SYNC or MS_ASYNC flag, if one
434 occurs.
435
436 Huge page (Huge TLB) mappings
437 For mappings that employ huge pages, the requirements for the arguments
438 of mmap() and munmap() differ somewhat from the requirements for map‐
439 pings that use the native system page size.
440
441 For mmap(), offset must be a multiple of the underlying huge page size.
442 The system automatically aligns length to be a multiple of the underly‐
443 ing huge page size.
444
445 For munmap(), addr and length must both be a multiple of the underlying
446 huge page size.
447
448 C library/kernel differences
449 This page describes the interface provided by the glibc mmap() wrapper
450 function. Originally, this function invoked a system call of the same
451 name. Since kernel 2.4, that system call has been superseded by
452 mmap2(2), and nowadays the glibc mmap() wrapper function invokes
453 mmap2(2) with a suitably adjusted value for offset.
454
456 On Linux, there are no guarantees like those suggested above under
457 MAP_NORESERVE. By default, any process can be killed at any moment
458 when the system runs out of memory.
459
460 In kernels before 2.6.7, the MAP_POPULATE flag has effect only if prot
461 is specified as PROT_NONE.
462
463 SUSv3 specifies that mmap() should fail if length is 0. However, in
464 kernels before 2.6.12, mmap() succeeded in this case: no mapping was
465 created and the call returned addr. Since kernel 2.6.12, mmap() fails
466 with the error EINVAL for this case.
467
468 POSIX specifies that the system shall always zero fill any partial page
469 at the end of the object and that system will never write any modifica‐
470 tion of the object beyond its end. On Linux, when you write data to
471 such partial page after the end of the object, the data stays in the
472 page cache even after the file is closed and unmapped and even though
473 the data is never written to the file itself, subsequent mappings may
474 see the modified content. In some cases, this could be fixed by call‐
475 ing msync(2) before the unmap takes place; however, this doesn't work
476 on tmpfs(5) (for example, when using the POSIX shared memory interface
477 documented in shm_overview(7)).
478
480 The following program prints part of the file specified in its first
481 command-line argument to standard output. The range of bytes to be
482 printed is specified via offset and length values in the second and
483 third command-line arguments. The program creates a memory mapping of
484 the required pages of the file and then uses write(2) to output the
485 desired bytes.
486
487 Program source
488 #include <sys/mman.h>
489 #include <sys/stat.h>
490 #include <fcntl.h>
491 #include <stdio.h>
492 #include <stdlib.h>
493 #include <unistd.h>
494
495 #define handle_error(msg) \
496 do { perror(msg); exit(EXIT_FAILURE); } while (0)
497
498 int
499 main(int argc, char *argv[])
500 {
501 char *addr;
502 int fd;
503 struct stat sb;
504 off_t offset, pa_offset;
505 size_t length;
506 ssize_t s;
507
508 if (argc < 3 || argc > 4) {
509 fprintf(stderr, "%s file offset [length]\n", argv[0]);
510 exit(EXIT_FAILURE);
511 }
512
513 fd = open(argv[1], O_RDONLY);
514 if (fd == -1)
515 handle_error("open");
516
517 if (fstat(fd, &sb) == -1) /* To obtain file size */
518 handle_error("fstat");
519
520 offset = atoi(argv[2]);
521 pa_offset = offset & ~(sysconf(_SC_PAGE_SIZE) - 1);
522 /* offset for mmap() must be page aligned */
523
524 if (offset >= sb.st_size) {
525 fprintf(stderr, "offset is past end of file\n");
526 exit(EXIT_FAILURE);
527 }
528
529 if (argc == 4) {
530 length = atoi(argv[3]);
531 if (offset + length > sb.st_size)
532 length = sb.st_size - offset;
533 /* Can't display bytes past end of file */
534
535 } else { /* No length arg ==> display to end of file */
536 length = sb.st_size - offset;
537 }
538
539 addr = mmap(NULL, length + offset - pa_offset, PROT_READ,
540 MAP_PRIVATE, fd, pa_offset);
541 if (addr == MAP_FAILED)
542 handle_error("mmap");
543
544 s = write(STDOUT_FILENO, addr + offset - pa_offset, length);
545 if (s != length) {
546 if (s == -1)
547 handle_error("write");
548
549 fprintf(stderr, "partial write");
550 exit(EXIT_FAILURE);
551 }
552
553 munmap(addr, length + offset - pa_offset);
554 close(fd);
555
556 exit(EXIT_SUCCESS);
557 }
558
560 ftruncate(2), getpagesize(2), memfd_create(2), mincore(2), mlock(2),
561 mmap2(2), mprotect(2), mremap(2), msync(2), remap_file_pages(2), setr‐
562 limit(2), shmat(2), userfaultfd(2), shm_open(3), shm_overview(7)
563
564 The descriptions of the following files in proc(5): /proc/[pid]/maps,
565 /proc/[pid]/map_files, and /proc/[pid]/smaps.
566
567 B.O. Gallmeister, POSIX.4, O'Reilly, pp. 128–129 and 389–391.
568
570 This page is part of release 5.02 of the Linux man-pages project. A
571 description of the project, information about reporting bugs, and the
572 latest version of this page, can be found at
573 https://www.kernel.org/doc/man-pages/.
574
575
576
577Linux 2019-02-27 MMAP(2)