From: <gr...@su...> - 2008-08-16 22:40:53
|
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 sta...@li... Tue Aug 5 13:14:58 2008 From: Jeff Dike <jd...@ad...> Date: Tue, 5 Aug 2008 16:14:09 -0400 Subject: uml: work around broken host PTRACE_SYSEMU To: st...@ke... Cc: LKML <lin...@vg...>, uml-devel <use...@li...> Message-ID: <200...@c2...> Content-Disposition: inline From: Jeff Dike <jd...@ad...> 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. Signed-off-by: Jeff Dike <jd...@li...> Signed-off-by: Andrew Morton <ak...@li...> Signed-off-by: Linus Torvalds <tor...@li...> Signed-off-by: Greg Kroah-Hartman <gr...@su...> --- arch/um/os-Linux/start_up.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) --- a/arch/um/os-Linux/start_up.c +++ b/arch/um/os-Linux/start_up.c @@ -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 jd...@ad... 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 |