xtensa: copy_thread with CLONE_VM must not copy live parent AR windows
authorMarc Gauthier <marc@tensilica.com>
Sun, 14 Oct 2012 23:55:35 +0000 (03:55 +0400)
committerChris Zankel <chris@zankel.net>
Tue, 16 Oct 2012 04:42:27 +0000 (21:42 -0700)
commit84ed30538b5d9a29a9612b93dd0a45d561624f82
treeb1f0001a732c3518076b8d63cbfe0081f80dafb4
parenteae8a416afe140df4b054c448476654db0d46bde
xtensa: copy_thread with CLONE_VM must not copy live parent AR windows

When doing a fork (new VM), the new task has a mirror image of the
parent's stack, so keeps the same live register windows etc.
However when doing a clone with CLONE_VM, keeping the same VM
(eg. when creating a new thread), the child starts afresh on a new
stack -- it cannot share any part of the parent stack.  It
especially cannot have the same live AR windows as the parent,
otherwise it will overwrite the parent stack on overflow, likely
causing corruption.  (and so it did...)

Effectively, the register windows need to be spilled.
Turns out it's much easier to simply not copy parent register
windows when CLONE_VM is set.

Signed-off-by: Marc Gauthier <marc@tensilica.com>
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Signed-off-by: Chris Zankel <chris@zankel.net>
arch/xtensa/kernel/process.c