Michel Lespinasse 1869305009 mm: introduce VM_POPULATE flag to better deal with racy userspace programs
The vm_populate() code populates user mappings without constantly
holding the mmap_sem.  This makes it susceptible to racy userspace
programs: the user mappings may change while vm_populate() is running,
and in this case vm_populate() may end up populating the new mapping
instead of the old one.

In order to reduce the possibility of userspace getting surprised by
this behavior, this change introduces the VM_POPULATE vma flag which
gets set on vmas we want vm_populate() to work on.  This way
vm_populate() may still end up populating the new mapping after such a
race, but only if the new mapping is also one that the user has
requested (using MAP_SHARED, MAP_LOCKED or mlock) to be populated.

Signed-off-by: Michel Lespinasse <walken@google.com>
Acked-by: Rik van Riel <riel@redhat.com>
Tested-by: Andy Lutomirski <luto@amacapital.net>
Cc: Greg Ungerer <gregungerer@westnet.com.au>
Cc: David Howells <dhowells@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2013-02-23 17:50:11 -08:00
..
2012-05-29 23:28:33 -04:00
2012-01-03 22:54:56 -05:00
2013-02-23 17:50:09 -08:00
2011-07-26 16:49:47 -07:00
2013-01-29 19:32:57 -08:00
2012-12-16 15:18:08 -08:00
2010-05-21 18:31:21 -04:00
2012-06-20 14:39:36 -07:00
2013-02-14 15:55:23 +01:00
2012-12-18 15:02:14 -08:00
2012-12-18 15:02:14 -08:00
2012-10-09 16:22:55 +09:00
2012-12-20 18:46:29 -05:00
2012-12-16 15:18:08 -08:00