Bug 6886

Summary: some imperfections in description of mmap()
Product: glibc Reporter: Siward de Groot <siward>
Component: manualAssignee: Roland McGrath <roland>
Status: RESOLVED INVALID    
Severity: minor CC: adhemerval.zanella, fweimer, glibc-bugs
Priority: P2 Flags: fweimer: security-
Version: unspecified   
Target Milestone: ---   
Host: Target:
Build: Last reconfirmed:

Description Siward de Groot 2008-09-14 22:07:18 UTC
Hi again, everyone,
today i have been reading manual section about mmap(),
  and some things are not completely clear to me,
  so, unless pebcak, i thought you might like to know about them :

 mmap description does not say what value of parameter length should be :
   it gives impression that it can be
   anything that is not larger than multiple of pagesize that is next higher
than size of file ;
   is this correct ?

 mmap() description does not mention what happens if writing beyond end of file,
   though i seem to remember reading somewhere that it causes a segfault ?

 mmap() description does not mention what happens if write to address that is
   beyond end of filecontent but inside mapped size ; will it segfault ?

 if a file is mmapped PROT_SHARED, and another process makes file smaller,
   will my process segfault when writing beyond new end of file ?
   is it possible to guard against this by locking file ?

 munmap description gives impression that if you do munmap it is not necessary
to use msync,
   but does not explicitly say so. is this indeed so ?

 munmap description says
   "If LENGTH is not an even number of pages, it will be rounded up."
   is this correct or should it say 'integer number of pages' ?

 munmap description says "This function is only available on a few systems.",
   but does not mention whether this includes GNU.
 also, _POSIX_MAPPED_FILES is mentioned near description of ftruncate,
   but there is no mention of whether this is defined on GNU.

 whole mmap section does not contain a link to description of enlarging mmapped
files,
   that is present in libc doc near description of ftruncate.

 Where sysconf(_SC_PAGESIZE) is shown in description of mmap(),
   i think it would be nice if it were mentioned that it is declared in unistd.h .

Thanks for reading, and have a nice day :-)
Siward
Comment 1 Adhemerval Zanella 2016-08-11 15:10:22 UTC
" mmap description does not say what value of parameter length should be :
   it gives impression that it can be
   anything that is not larger than multiple of pagesize that is next higher
than size of file ;
   is this correct ?"

   POSIX states that it can be anything and also states the returned segment
shuld adressable for range [pa,pa+len).  It is an implementation details if
underlaying granularity would be in page sizes.

" mmap() description does not mention what happens if writing beyond end of file,
   though i seem to remember reading somewhere that it causes a segfault ?"

  man mmap:

  SIGBUS Attempted  access  to  a portion of the buffer that does not correspond
  to the file (for example, beyond the end of the file, including the case where 
  another process has truncated the file).


" mmap() description does not mention what happens if write to address that is
   beyond end of filecontent but inside mapped size ; will it segfault ?"

  Same as before.

" if a file is mmapped PROT_SHARED, and another process makes file smaller,
   will my process segfault when writing beyond new end of file ?
   is it possible to guard against this by locking file ?"

  man mmap:

  "MAP_SHARED      Share  this mapping.  Updates to the mapping are visible to 
   other processes that map this file, and are carried through to the underlying
   file.  (To precisely control when updates are carried through to the underlying
   file requires the use of msync(2).)"

"munmap description gives impression that if you do munmap it is not necessary
to use msync, but does not explicitly say so. is this indeed so ?"

  Yes and manual now states when you should call msync.

As for BZ#6887 I will close this bug.