]> git.baikalelectronics.ru Git - kernel.git/commit
mm: do not grow the stack vma just because of an overrun on preceding vma
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 27 Feb 2013 16:36:04 +0000 (08:36 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 27 Feb 2013 16:36:04 +0000 (08:36 -0800)
commit0d9f0cc4b86ce2741eafdef3a640773ff2f59c80
tree4cf0ea71bb20c8d81147614e90e53df3368405e5
parenta802cd117760cd7283bb05d59215f89dcef483d0
mm: do not grow the stack vma just because of an overrun on preceding vma

The stack vma is designed to grow automatically (marked with VM_GROWSUP
or VM_GROWSDOWN depending on architecture) when an access is made beyond
the existing boundary.  However, particularly if you have not limited
your stack at all ("ulimit -s unlimited"), this can cause the stack to
grow even if the access was really just one past *another* segment.

And that's wrong, especially since we first grow the segment, but then
immediately later enforce the stack guard page on the last page of the
segment.  So _despite_ first growing the stack segment as a result of
the access, the kernel will then make the access cause a SIGSEGV anyway!

So do the same logic as the guard page check does, and consider an
access to within one page of the next segment to be a bad access, rather
than growing the stack to abut the next segment.

Reported-and-tested-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/mmap.c