x86: fix execve with -fstack-protect
authorIngo Molnar <mingo@elte.hu>
Tue, 26 Feb 2008 11:55:57 +0000 (12:55 +0100)
committerIngo Molnar <mingo@elte.hu>
Tue, 26 Feb 2008 11:55:57 +0000 (12:55 +0100)
commit5d119b2c9a490e2d647eae134211b32a18a04c7d
tree37f40ec2e3ae4ad793d6c4c40f253e4266895d09
parentce28b9864b853803320c3f1d8de1b81aa4120b14
x86: fix execve with -fstack-protect

pointed out by pageexec@freemail.hu:

> what happens here is that gcc treats the argument area as owned by the
> callee, not the caller and is allowed to do certain tricks. for ssp it
> will make a copy of the struct passed by value into the local variable
> area and pass *its* address down, and it won't copy it back into the
> original instance stored in the argument area.
>
> so once sys_execve returns, the pt_regs passed by value hasn't at all
> changed and its default content will cause a nice double fault (FWIW,
> this part took me the longest to debug, being down with cold didn't
> help it either ;).

To fix this we pass in pt_regs by pointer.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/kernel/entry_64.S
arch/x86/kernel/process_64.c