On Tue, 19 Sep 2000, Jeff Dike wrote: > [EMAIL PROTECTED] said: > > I tested vanilla test7 with ptrace() patch. It breaks uml exactly > > like I see with any kernel > test7. > > > 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 > > Yuri, I apologize for doubting you. That's about the best evidence possible > that the test8 ptrace fix is what's breaking UML and not the thread group > stuff. > > If anyone has any idea why that fix breaks PTRACE_SYSCALL, I'd love to know. > I'm kind of short on time at the moment, so I'm not in a great position to > delve into this at the moment. > > Until this is fixed, UML doesn't work on any host kernels beyond test7. As a further verification that this change is causing problems for UML, test9-pre5 allows uml to run if the ptrace.c change is reverted. I do understand that this is not the correct fix for the problem, but for those who would like to independently verify this, the (incorrect) patch is attached. Cheers, - Bill --------------------------------------------------------------------------- Things you Do Not Want To See On IRC: your husband commenting on the S390 port and in the next comment, announcing that he expects a new toy. He tells me the two are unrelated. I do hope so. - Telsa Gwynn, Alan Cox' wife -------------------------------------------------------------------------- William Stearns ([EMAIL PROTECTED]). Mason, Buildkernel, named2hosts, and ipfwadm2ipchains are at: http://www.pobox.com/~wstearns LinuxMonth; articles for Linux Enthusiasts! http://www.linuxmonth.com --------------------------------------------------------------------------
diff -u --recursive --new-file linux/arch/i386/kernel/ptrace.c.orig linux/arch/i386/kernel/ptrace.c --- linux/arch/i386/kernel/ptrace.c.orig Thu Sep 21 00:34:03 2000 +++ linux/arch/i386/kernel/ptrace.c Thu Sep 21 11:44:36 2000 @@ -100,10 +100,10 @@ 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; +// 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;