x86, um: convert to saner kernel_execve() semantics
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -298,12 +298,20 @@ ENTRY(ret_from_fork)
|
||||
CFI_ENDPROC
|
||||
END(ret_from_fork)
|
||||
|
||||
ENTRY(ret_from_kernel_execve)
|
||||
movl %eax, %esp
|
||||
movl $0,PT_EAX(%esp)
|
||||
ENTRY(ret_from_kernel_thread)
|
||||
CFI_STARTPROC
|
||||
pushl_cfi %eax
|
||||
call schedule_tail
|
||||
GET_THREAD_INFO(%ebp)
|
||||
popl_cfi %eax
|
||||
pushl_cfi $0x0202 # Reset kernel eflags
|
||||
popfl_cfi
|
||||
movl PT_EBP(%esp),%eax
|
||||
call *PT_EBX(%esp)
|
||||
movl $0,PT_EAX(%esp)
|
||||
jmp syscall_exit
|
||||
END(ret_from_kernel_execve)
|
||||
CFI_ENDPROC
|
||||
ENDPROC(ret_from_kernel_thread)
|
||||
|
||||
/*
|
||||
* Interrupt exit functions should be protected against kprobes
|
||||
@@ -994,21 +1002,6 @@ END(spurious_interrupt_bug)
|
||||
*/
|
||||
.popsection
|
||||
|
||||
ENTRY(ret_from_kernel_thread)
|
||||
CFI_STARTPROC
|
||||
pushl_cfi %eax
|
||||
call schedule_tail
|
||||
GET_THREAD_INFO(%ebp)
|
||||
popl_cfi %eax
|
||||
pushl_cfi $0x0202 # Reset kernel eflags
|
||||
popfl_cfi
|
||||
movl PT_EBP(%esp),%eax
|
||||
call *PT_EBX(%esp)
|
||||
call do_exit
|
||||
ud2 # padding for call trace
|
||||
CFI_ENDPROC
|
||||
ENDPROC(ret_from_kernel_thread)
|
||||
|
||||
#ifdef CONFIG_XEN
|
||||
/* Xen doesn't set %esp to be precisely what the normal sysenter
|
||||
entrypoint expects, so fix it up before using the normal path. */
|
||||
|
@@ -459,15 +459,13 @@ ENTRY(ret_from_fork)
|
||||
jmp ret_from_sys_call # go to the SYSRET fastpath
|
||||
|
||||
1:
|
||||
subq $REST_SKIP, %rsp # move the stack pointer back
|
||||
subq $REST_SKIP, %rsp # leave space for volatiles
|
||||
CFI_ADJUST_CFA_OFFSET REST_SKIP
|
||||
movq %rbp, %rdi
|
||||
call *%rbx
|
||||
# exit
|
||||
mov %eax, %edi
|
||||
call do_exit
|
||||
ud2 # padding for call trace
|
||||
|
||||
movl $0, RAX(%rsp)
|
||||
RESTORE_REST
|
||||
jmp int_ret_from_sys_call
|
||||
CFI_ENDPROC
|
||||
END(ret_from_fork)
|
||||
|
||||
@@ -1214,20 +1212,6 @@ bad_gs:
|
||||
jmp 2b
|
||||
.previous
|
||||
|
||||
ENTRY(ret_from_kernel_execve)
|
||||
movq %rdi, %rsp
|
||||
movl $0, RAX(%rsp)
|
||||
// RESTORE_REST
|
||||
movq 0*8(%rsp), %r15
|
||||
movq 1*8(%rsp), %r14
|
||||
movq 2*8(%rsp), %r13
|
||||
movq 3*8(%rsp), %r12
|
||||
movq 4*8(%rsp), %rbp
|
||||
movq 5*8(%rsp), %rbx
|
||||
addq $(6*8), %rsp
|
||||
jmp int_ret_from_sys_call
|
||||
END(ret_from_kernel_execve)
|
||||
|
||||
/* Call softirq on interrupt stack. Interrupts are off. */
|
||||
ENTRY(call_softirq)
|
||||
CFI_STARTPROC
|
||||
|
Reference in New Issue
Block a user