mm: fix up some user-visible effects of the stack guard page
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 15 Aug 2010 18:35:52 +0000 (11:35 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 20 Aug 2010 18:34:24 +0000 (11:34 -0700)
commite4599a4a45259b9cfb0942d36f6f35f3dca1d893
treef49aa4b2cb9d15b7273f26e7c135729e5f96795d
parent058daedc8311ab42702dfe29d3ff16dff7e7eaf8
mm: fix up some user-visible effects of the stack guard page

commit d7824370e26325c881b665350ce64fb0a4fde24a upstream.

This commit makes the stack guard page somewhat less visible to user
space. It does this by:

 - not showing the guard page in /proc/<pid>/maps

   It looks like lvm-tools will actually read /proc/self/maps to figure
   out where all its mappings are, and effectively do a specialized
   "mlockall()" in user space.  By not showing the guard page as part of
   the mapping (by just adding PAGE_SIZE to the start for grows-up
   pages), lvm-tools ends up not being aware of it.

 - by also teaching the _real_ mlock() functionality not to try to lock
   the guard page.

   That would just expand the mapping down to create a new guard page,
   so there really is no point in trying to lock it in place.

It would perhaps be nice to show the guard page specially in
/proc/<pid>/maps (or at least mark grow-down segments some way), but
let's not open ourselves up to more breakage by user space from programs
that depends on the exact deails of the 'maps' file.

Special thanks to Henrique de Moraes Holschuh for diving into lvm-tools
source code to see what was going on with the whole new warning.

Reported-and-tested-by: Fran├žois Valenduc <francois.valenduc@tvcablenet.be
Reported-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
fs/proc/task_mmu.c
mm/mlock.c