uml: work around broken host PTRACE_SYSEMU
PATCH 11/14 uml: work around broken host PTRACE_SYSEMU
From f1ef9167ca4494a8c6d71d0031c73e9c8841eadd
Fedora broke PTRACE_SYSEMU again, and UML crashes as a result when it doesn't need to. This patch makes the PTRACE_SYSEMU check fail gracefully and makes UML fall back to PTRACE_SYSCALL.
--- arch/um/os-Linux/start_up.c | 25 ++++++++++++++++--------- 1 files changed, 16 insertions(+), 9 deletions(-)
arch/um/os-Linux/start_up.c +16 -9
@@ -122,8 +122,10 @@ static int stop_ptraced_child(int pid, int exitcode, int mustexit) {int status, n, ret =0 ; -if (ptrace (PTRACE_CONT , pid,0 ,0 ) <0 ) -fatal_perror ("stop_ptraced_child : ptrace failed" ); +if (ptrace (PTRACE_CONT , pid,0 ,0 ) <0 ) { +perror ("stop_ptraced_child : ptrace failed" ); +return -1 ; + }CATCH_EINTR (n =waitpid (pid, &status,0 ));if (!WIFEXITED (status) || (WEXITSTATUS (status) != exitcode)) {int exit_with =WEXITSTATUS (status);
@@ -203,7 +205,7 @@ static void __init check_sysemu(void)if (n <0 )fatal_perror ("check_sysemu : wait failed" );if (!WIFSTOPPED (status) || (WSTOPSIG (status) !=SIGTRAP )) -fatal ("check_sysemu : expected SIGTRAP, got status = %d" , +fatal ("check_sysemu : expected SIGTRAP, got status = %d\n" , status);if (ptrace (PTRACE_GETREGS , pid,0 , regs) <0 )
@@ -245,9 +247,11 @@ static void __init check_sysemu(void)if (WIFSTOPPED (status) && (WSTOPSIG (status) == (SIGTRAP |0x80 ))) { -if (!count) -fatal ("check_ptrace : SYSEMU_SINGLESTEP " -"doesn't singlestep" ); +if (!count) { +non_fatal ("check_ptrace : SYSEMU_SINGLESTEP " +"doesn't singlestep" ); + goto fail; + } n =ptrace (PTRACE_POKEUSR , pid,PT_SYSCALL_RET_OFFSET ,os_getpid ());if (n <0 )
@@ -257,9 +261,12 @@ static void __init check_sysemu(void) }else if (WIFSTOPPED (status) && (WSTOPSIG (status) ==SIGTRAP )) count++; -else -fatal ("check_ptrace : expected SIGTRAP or " -"(SIGTRAP | 0x80), got status = %d" , status); +else { +non_fatal ("check_ptrace : expected SIGTRAP or " +"(SIGTRAP | 0x80), got status = %d\n" , + status); + goto fail; + } }if (stop_ptraced_child (pid,0 ,0 ) <0 ) goto fail_stopped;
Signature · 12 lines
1.5.5.1 ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ User-mode-linux-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
patch uml-work-around-broken-host-ptrace_sysemu.patch added to 2.6.25-stable tree
This is a note to let you know that we have just queued up the patch titled
Subject: uml: work around broken host PTRACE_SYSEMU
to the 2.6.25-stable tree. Its filename is
uml-work-around-broken-host-ptrace_sysemu.patch
A git repo of this tree can be found at
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
From [email protected] Tue Aug 5 13:14:58 2008
From: Jeff Dike <[email protected]>
Date: Tue, 5 Aug 2008 16:14:09 -0400
Subject: uml: work around broken host PTRACE_SYSEMU
To: [email protected]
Cc: LKML <[email protected]>, uml-devel <[email protected]>
Message-ID: <[email protected]>
Content-Disposition: inline
From: Jeff Dike <[email protected]>
commit f1ef9167ca4494a8c6d71d0031c73e9c8841eadd upstream
Fedora broke PTRACE_SYSEMU again, and UML crashes as a result when it doesn't need to. This patch makes the PTRACE_SYSEMU check fail gracefully and makes UML fall back to PTRACE_SYSCALL.
--- arch/um/os-Linux/start_up.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-)
arch/um/os-Linux/start_up.c +16 -9
@@ -122,8 +122,10 @@ static int stop_ptraced_child(int pid, i {int status, n, ret =0 ; -if (ptrace (PTRACE_CONT , pid,0 ,0 ) <0 ) -fatal_perror ("stop_ptraced_child : ptrace failed" ); +if (ptrace (PTRACE_CONT , pid,0 ,0 ) <0 ) { +perror ("stop_ptraced_child : ptrace failed" ); +return -1 ; + }CATCH_EINTR (n =waitpid (pid, &status,0 ));if (!WIFEXITED (status) || (WEXITSTATUS (status) != exitcode)) {int exit_with =WEXITSTATUS (status);
@@ -203,7 +205,7 @@ static void __init check_sysemu(void)if (n <0 )fatal_perror ("check_sysemu : wait failed" );if (!WIFSTOPPED (status) || (WSTOPSIG (status) !=SIGTRAP )) -fatal ("check_sysemu : expected SIGTRAP, got status = %d" , +fatal ("check_sysemu : expected SIGTRAP, got status = %d\n" , status);if (ptrace (PTRACE_GETREGS , pid,0 , regs) <0 )
@@ -245,9 +247,11 @@ static void __init check_sysemu(void)if (WIFSTOPPED (status) && (WSTOPSIG (status) == (SIGTRAP |0x80 ))) { -if (!count) -fatal ("check_ptrace : SYSEMU_SINGLESTEP " -"doesn't singlestep" ); +if (!count) { +non_fatal ("check_ptrace : SYSEMU_SINGLESTEP " +"doesn't singlestep" ); + goto fail; + } n =ptrace (PTRACE_POKEUSR , pid,PT_SYSCALL_RET_OFFSET ,os_getpid ());if (n <0 )
@@ -257,9 +261,12 @@ static void __init check_sysemu(void) }else if (WIFSTOPPED (status) && (WSTOPSIG (status) ==SIGTRAP )) count++; -else -fatal ("check_ptrace : expected SIGTRAP or " -"(SIGTRAP | 0x80), got status = %d" , status); +else { +non_fatal ("check_ptrace : expected SIGTRAP or " +"(SIGTRAP | 0x80), got status = %d\n" , + status); + goto fail; + } }if (stop_ptraced_child (pid,0 ,0 ) <0 ) goto fail_stopped;
Patches currently in stable-queue which might be from [email protected] are
queue-2.6.25/uml-fix-build-when-slob-is-enabled.patch queue-2.6.25/uml-fix-bad-ntp-interaction-with-clock.patch queue-2.6.25/uml-physical-memory-shouldn-t-include-initial-stack.patch queue-2.6.25/uml-track-and-make-up-lost-ticks.patch queue-2.6.25/uml-missed-kmalloc-in-pcap_user.c.patch queue-2.6.25/uml-deal-with-host-time-going-backwards.patch queue-2.6.25/uml-deal-with-inaccessible-address-space-start.patch queue-2.6.25/uml-missing-export-of-csum_partial-on-uml-amd64.patch queue-2.6.25/uml-memcpy-export-needs-to-follow-host-declaration.patch queue-2.6.25/uml-stub-needs-to-tolerate-sigwinch.patch queue-2.6.25/uml-work-around-broken-host-ptrace_sysemu.patch queue-2.6.25/uml-fix-gcc-ices-and-unresolved-externs.patch queue-2.6.25/uml-fix-boot-crash.patch
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
User-mode-linux-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel