UML - Improve host PTRACE_SYSEMU check
PATCH 1/1 UML - Improve host PTRACE_SYSEMU check
Make the PTRACE_SYSEMU checking more robust. It will make sure that system call numbers are reported correctly. If there is a problem, it will disable PTRACE_SYSEMU use and use PTRACE_SYSCALL instead.
This fixes a hang on boot on FC6 hosts with a broken PTRACE_SYSEMU.
--
arch/um/os-Linux/start_up.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-)
arch/um/os-Linux/start_up.c +16 -8
@@ -144,9 +144,7 @@ static int stop_ptraced_child(int pid, vint exit_with =WEXITSTATUS (status);if (exit_with ==2 )non_fatal ("check_ptrace : child exited with status 2. " -"Serious trouble happening! Try updating " -"your host skas patch!\nDisabling SYSEMU " -"support." ); +"\nDisabling SYSEMU support.\n" );non_fatal ("check_ptrace : child exited with exitcode %d, while " "expecting %d; status 0x%x\n" , exit_with, exitcode, status);
@@ -209,6 +207,7 @@ __uml_setup("nosysemu", nosysemu_cmd_parstatic void __init check_sysemu (void ) {void *stack; +unsigned long regs[MAX_REG_NR ];int pid, n, status, count=0 ;non_fatal ("Checking syscall emulation patch for ptrace..." );
@@ -225,11 +224,20 @@ static void __init check_sysemu(void)fatal ("check_sysemu : expected SIGTRAP, got status = %d" , status); - n =ptrace (PTRACE_POKEUSR , pid,PT_SYSCALL_RET_OFFSET , -os_getpid ()); -if (n <0 ) -fatal_perror ("check_sysemu : failed to modify system call " -"return" ); +if (ptrace (PTRACE_GETREGS , pid,0 , regs) <0 ) +fatal_perror ("check_sysemu : PTRACE_GETREGS failed" ); +if (PT_SYSCALL_NR (regs) != __NR_getpid){ +non_fatal ("check_sysemu got system call number %d, " +"expected %d..." ,PT_SYSCALL_NR (regs), __NR_getpid); + goto fail; + } + + n =ptrace (PTRACE_POKEUSR , pid,PT_SYSCALL_RET_OFFSET ,os_getpid ()); +if (n <0 ){ +non_fatal ("check_sysemu : failed to modify system call " +"return" ); + goto fail; + }if (stop_ptraced_child (pid, stack,0 ,0 ) <0 ) goto fail_stopped;
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
User-mode-linux-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel