David Howells 81759b5b22 nommu: fix race between ramfs truncation and shared mmap
Fix the race between the truncation of a ramfs file and an attempt to make
a shared mmap of region of that file.

The problem is that do_mmap_pgoff() calls f_op->get_unmapped_area() to
verify that the file region is made of contiguous pages and to find its
base address - but there isn't any locking to guarantee this region until
vma_prio_tree_insert() is called by add_vma_to_mm().

Note that moving the functionality into f_op->mmap() doesn't help as that
is also called before vma_prio_tree_insert().

Instead make ramfs_nommu_check_mappings() grab nommu_region_sem whilst it
does its checks.  This means that this function will wait whilst mmaps
take place.

Signed-off-by: David Howells <dhowells@redhat.com>
Acked-by: Al Viro <viro@zeniv.linux.org.uk>
Cc: Greg Ungerer <gerg@snapgear.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-01-16 12:15:40 -08:00
..
2009-06-11 21:36:14 -04:00
2009-12-10 15:02:50 +01:00
2009-07-12 12:22:34 -07:00
2009-06-17 00:36:36 -04:00
2009-07-12 12:22:34 -07:00
2009-12-15 08:53:10 -08:00
2009-12-16 07:20:06 -08:00
2009-12-22 12:27:35 -05:00
2010-01-06 18:48:26 -05:00
2009-12-17 11:03:25 -05:00
2010-01-11 09:34:07 -08:00
2009-12-16 07:20:18 -08:00
2009-06-17 00:36:37 -04:00
2009-12-14 21:40:04 +01:00
2009-12-16 07:20:06 -08:00
2009-12-16 07:20:13 -08:00
2009-12-22 12:27:34 -05:00
2009-09-24 08:41:47 -04:00
2009-09-24 07:21:03 -07:00
2009-12-17 04:52:13 -05:00
2009-12-17 11:03:25 -05:00
2009-12-14 18:12:11 -05:00
2009-12-22 12:27:34 -05:00
2009-12-17 10:51:40 -05:00
2009-10-04 15:05:10 -07:00
2009-12-16 12:16:49 -05:00