Commit 48ee679a authored by Roland McGrath's avatar Roland McGrath Committed by Ingo Molnar

x86: ia32 ptrace vs -ENOSYS sysenter/syscall

The previous "x86_64 ia32 ptrace vs -ENOSYS" fix only covered
the int $0x80 system call entries.  This does the same fix
for the sysenter and syscall instruction paths.
Signed-off-by: default avatarRoland McGrath <roland@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent a31f8dd7
...@@ -162,12 +162,14 @@ sysenter_tracesys: ...@@ -162,12 +162,14 @@ sysenter_tracesys:
SAVE_REST SAVE_REST
CLEAR_RREGS CLEAR_RREGS
movq %r9,R9(%rsp) movq %r9,R9(%rsp)
movq $-ENOSYS,RAX(%rsp) /* really needed? */ movq $-ENOSYS,RAX(%rsp)/* ptrace can change this for a bad syscall */
movq %rsp,%rdi /* &pt_regs -> arg1 */ movq %rsp,%rdi /* &pt_regs -> arg1 */
call syscall_trace_enter call syscall_trace_enter
LOAD_ARGS32 ARGOFFSET /* reload args from stack in case ptrace changed it */ LOAD_ARGS32 ARGOFFSET /* reload args from stack in case ptrace changed it */
RESTORE_REST RESTORE_REST
xchgl %ebp,%r9d xchgl %ebp,%r9d
cmpl $(IA32_NR_syscalls-1),%eax
ja int_ret_from_sys_call /* sysenter_tracesys has set RAX(%rsp) */
jmp sysenter_do_call jmp sysenter_do_call
CFI_ENDPROC CFI_ENDPROC
ENDPROC(ia32_sysenter_target) ENDPROC(ia32_sysenter_target)
...@@ -261,13 +263,15 @@ cstar_tracesys: ...@@ -261,13 +263,15 @@ cstar_tracesys:
SAVE_REST SAVE_REST
CLEAR_RREGS CLEAR_RREGS
movq %r9,R9(%rsp) movq %r9,R9(%rsp)
movq $-ENOSYS,RAX(%rsp) /* really needed? */ movq $-ENOSYS,RAX(%rsp) /* ptrace can change this for a bad syscall */
movq %rsp,%rdi /* &pt_regs -> arg1 */ movq %rsp,%rdi /* &pt_regs -> arg1 */
call syscall_trace_enter call syscall_trace_enter
LOAD_ARGS32 ARGOFFSET /* reload args from stack in case ptrace changed it */ LOAD_ARGS32 ARGOFFSET /* reload args from stack in case ptrace changed it */
RESTORE_REST RESTORE_REST
xchgl %ebp,%r9d xchgl %ebp,%r9d
movl RSP-ARGOFFSET(%rsp), %r8d movl RSP-ARGOFFSET(%rsp), %r8d
cmpl $(IA32_NR_syscalls-1),%eax
ja int_ret_from_sys_call /* cstar_tracesys has set RAX(%rsp) */
jmp cstar_do_call jmp cstar_do_call
END(ia32_cstar_target) END(ia32_cstar_target)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment