]> git.karo-electronics.de Git - karo-tx-linux.git/commit
mm: introduce VM_POPULATE flag to better deal with racy userspace programs
authorMichel Lespinasse <walken@google.com>
Wed, 20 Feb 2013 02:14:09 +0000 (13:14 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Wed, 20 Feb 2013 05:52:26 +0000 (16:52 +1100)
commitaeb01c910da87702d299fa291254534b2a00c1c2
tree1130128dd632bd80fdeade39735d37fd135a2090
parentded22e7a52e04f0aed854a55adadaf3090a065e2
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>
include/linux/mm.h
include/linux/mman.h
mm/fremap.c
mm/mlock.c
mm/mmap.c