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;

Reply via email to