x86: pass in pt_regs pointer for syscalls that need it
Some syscalls need to access the pt_regs structure, either to copy user register state or to modifiy it. This patch adds stubs to load the address of the pt_regs struct into the %eax register, and changes the syscalls to regparm(1) to receive the pt_regs pointer as the first argument. Signed-off-by: Brian Gerst <brgerst@gmail.com> Acked-by: Tejun Heo <tj@kernel.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
@@ -697,6 +697,26 @@ syscall_badsys:
|
||||
END(syscall_badsys)
|
||||
CFI_ENDPROC
|
||||
|
||||
/*
|
||||
* System calls that need a pt_regs pointer.
|
||||
*/
|
||||
#define PTREGSCALL(name) \
|
||||
ALIGN; \
|
||||
ptregs_##name: \
|
||||
leal 4(%esp),%eax; \
|
||||
jmp sys_##name;
|
||||
|
||||
PTREGSCALL(iopl)
|
||||
PTREGSCALL(fork)
|
||||
PTREGSCALL(clone)
|
||||
PTREGSCALL(vfork)
|
||||
PTREGSCALL(execve)
|
||||
PTREGSCALL(sigaltstack)
|
||||
PTREGSCALL(sigreturn)
|
||||
PTREGSCALL(rt_sigreturn)
|
||||
PTREGSCALL(vm86)
|
||||
PTREGSCALL(vm86old)
|
||||
|
||||
.macro FIXUP_ESPFIX_STACK
|
||||
/* since we are on a wrong stack, we cant make it a C code :( */
|
||||
PER_CPU(gdt_page, %ebx)
|
||||
|
Reference in New Issue
Block a user