Re: [User-mode-linux-user] Ptrace broken since 2.4.0-test8pre4?...

From: Yuri Pudgorodsky (yur@asplinux.ru)
Date: Tue Sep 19 2000 - 15:10:12 EST


Hello Jeff,

I tested vanilla test7 with ptrace() patch.
It breaks uml exactly like I see with any kernel > test7.

Seems like the ORIG_EAX != -1 is needed to correctly restart syscall
after PTRACE_SYSCALL, but I did not check this codepath thoroughly.

Following what is going with uml, just for the very first exec:

[lots of trap_user.c:228, trap_user.c:149 skipped]

start_syscall():
process.c:181 ptrace(PTRACE_GETREGS, 4901, 0, 501242c0) = 0

finish_exec():
exec_user.c:26 ptrace(PTRACE_POKEUSER, 4901, UESP, bf7fff20) = 0
exec_user.c:27 ptrace(PTRACE_POKEUSER, 4901, EIP, 400019a0) = 0
exec_user.c:28 ptrace(PTRACE_POKEUSER, 4901, EDX, 0) = 0
exec_user.c:29 ptrace(PTRACE_SYSCALL, 4901, 0, 0) = 0

And voila, we got SIGSEGV instead of happy running child:
Child 4901 exited with signal 11

> Have you tried putting that ptrace patch into test7 and seeing if UML stops
> working with that as the host?
>
> test8 is a known bad platform for UML, so I'm going to consider that the
> ptrace patch is OK unless it's possible to turn a good host into a bad one by
> adding that ptrace fix.

--- v2.4.0-test7/linux/arch/i386/kernel/ptrace.c Fri Jun 23 21:55:07 2000
+++ linux/arch/i386/kernel/ptrace.c Sat Sep 2 12:00:02 2000
@@ -99,6 +99,11 @@
                case EFL:
                        value &= FLAG_MASK;
                        value |= get_stack_long(child, EFL_OFFSET) & ~FLAG_MASK;
+ break;
+ case EIP:
+ /* Mark us as not being in a system call, so that no restart issues happen
*/
+ put_stack_long(child, 4*ORIG_EAX - sizeof(struct pt_regs), -1);
+ break;
        }
        if (regno > GS*4)
                regno -= 2*4;

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sat Sep 23 2000 - 21:00:21 EST