Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8ab32bb8 authored by Roland McGrath's avatar Roland McGrath Committed by Ingo Molnar
Browse files

x86: ia32 ptrace vs -ENOSYS



When we're stopped at syscall entry tracing, ptrace can change the %eax
value from -ENOSYS to something else.  If no system call is actually made
because the syscall number (now in orig_eax) is bad, then the %eax value
set by ptrace should be returned to the user.  But, instead it gets reset
to -ENOSYS again.  This is a regression from the native 32-bit kernel.

This change fixes it by leaving the return value alone after entry tracing.

Signed-off-by: default avatarRoland McGrath <roland@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent ede1389f
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -325,7 +325,7 @@ ENTRY(ia32_syscall)
	jnz ia32_tracesys
ia32_do_syscall:	
	cmpl $(IA32_NR_syscalls-1),%eax
	ja  ia32_badsys
	ja  int_ret_from_sys_call	/* ia32_tracesys has set RAX(%rsp) */
	IA32_ARG_FIXUP
	call *ia32_sys_call_table(,%rax,8) # xxx: rip relative
ia32_sysret:
@@ -335,7 +335,7 @@ ia32_sysret:
ia32_tracesys:			 
	SAVE_REST
	CLEAR_RREGS
	movq $-ENOSYS,RAX(%rsp)	/* really needed? */
	movq $-ENOSYS,RAX(%rsp)	/* ptrace can change this for a bad syscall */
	movq %rsp,%rdi        /* &pt_regs -> arg1 */
	call syscall_trace_enter
	LOAD_ARGS32 ARGOFFSET  /* reload args from stack in case ptrace changed it */