From: Jeff D. <jd...@ad...> - 2007-08-02 21:04:49
|
Remove includes of asm/page.h from libc code. This header seems to be disappearing, and UML doesn't make much use of it anyway. The one use, PAGE_SHIFT in stub.h, is handled by copying the constant from the kernel side of the house in common_offsets.h. Signed-off-by: Jeff Dike <jd...@li...> -- arch/um/include/common-offsets.h | 1 + arch/um/include/sysdep-i386/stub.h | 3 +-- arch/um/os-Linux/main.c | 1 - arch/um/os-Linux/skas/mem.c | 1 - arch/um/os-Linux/start_up.c | 1 - arch/um/os-Linux/tt.c | 1 - 6 files changed, 2 insertions(+), 6 deletions(-) Index: linux-2.6.21-mm/arch/um/include/sysdep-i386/stub.h =================================================================== --- linux-2.6.21-mm.orig/arch/um/include/sysdep-i386/stub.h 2007-08-02 16:43:17.000000000 -0400 +++ linux-2.6.21-mm/arch/um/include/sysdep-i386/stub.h 2007-08-02 16:43:20.000000000 -0400 @@ -9,7 +9,6 @@ #include <sys/mman.h> #include <asm/ptrace.h> #include <asm/unistd.h> -#include <asm/page.h> #include "stub-data.h" #include "kern_constants.h" #include "uml-config.h" @@ -19,7 +18,7 @@ extern void stub_clone_handler(void); #define STUB_SYSCALL_RET EAX #define STUB_MMAP_NR __NR_mmap2 -#define MMAP_OFFSET(o) ((o) >> PAGE_SHIFT) +#define MMAP_OFFSET(o) ((o) >> UM_KERN_PAGE_SHIFT) static inline long stub_syscall0(long syscall) { Index: linux-2.6.21-mm/arch/um/os-Linux/main.c =================================================================== --- linux-2.6.21-mm.orig/arch/um/os-Linux/main.c 2007-08-02 16:43:17.000000000 -0400 +++ linux-2.6.21-mm/arch/um/os-Linux/main.c 2007-08-02 16:43:20.000000000 -0400 @@ -12,7 +12,6 @@ #include <sys/resource.h> #include <sys/mman.h> #include <sys/user.h> -#include <asm/page.h> #include "kern_util.h" #include "as-layout.h" #include "mem_user.h" Index: linux-2.6.21-mm/arch/um/os-Linux/skas/mem.c =================================================================== --- linux-2.6.21-mm.orig/arch/um/os-Linux/skas/mem.c 2007-08-02 16:43:17.000000000 -0400 +++ linux-2.6.21-mm/arch/um/os-Linux/skas/mem.c 2007-08-02 16:43:20.000000000 -0400 @@ -9,7 +9,6 @@ #include <unistd.h> #include <sys/mman.h> #include <sys/wait.h> -#include <asm/page.h> #include <asm/unistd.h> #include "mem_user.h" #include "mem.h" Index: linux-2.6.21-mm/arch/um/os-Linux/start_up.c =================================================================== --- linux-2.6.21-mm.orig/arch/um/os-Linux/start_up.c 2007-08-02 16:43:17.000000000 -0400 +++ linux-2.6.21-mm/arch/um/os-Linux/start_up.c 2007-08-02 16:43:20.000000000 -0400 @@ -19,7 +19,6 @@ #include <sys/mman.h> #include <sys/resource.h> #include <asm/unistd.h> -#include <asm/page.h> #include <sys/types.h> #include "kern_util.h" #include "user.h" Index: linux-2.6.21-mm/arch/um/os-Linux/tt.c =================================================================== --- linux-2.6.21-mm.orig/arch/um/os-Linux/tt.c 2007-08-02 16:43:17.000000000 -0400 +++ linux-2.6.21-mm/arch/um/os-Linux/tt.c 2007-08-02 16:43:20.000000000 -0400 @@ -17,7 +17,6 @@ #include <sys/mman.h> #include <asm/ptrace.h> #include <asm/unistd.h> -#include <asm/page.h> #include "kern_util.h" #include "user.h" #include "signal_kern.h" Index: linux-2.6.21-mm/arch/um/include/common-offsets.h =================================================================== --- linux-2.6.21-mm.orig/arch/um/include/common-offsets.h 2007-08-02 16:43:17.000000000 -0400 +++ linux-2.6.21-mm/arch/um/include/common-offsets.h 2007-08-02 16:43:20.000000000 -0400 @@ -10,6 +10,7 @@ OFFSET(HOST_TASK_PID, task_struct, pid); DEFINE(UM_KERN_PAGE_SIZE, PAGE_SIZE); DEFINE(UM_KERN_PAGE_MASK, PAGE_MASK); +DEFINE(UM_KERN_PAGE_SHIFT, PAGE_SHIFT); DEFINE(UM_NSEC_PER_SEC, NSEC_PER_SEC); DEFINE_STR(UM_KERN_EMERG, KERN_EMERG); |
From: Jeff D. <jd...@ad...> - 2007-11-01 19:53:48
|
commit cd56e0945db8a5cd3176dcff2319f9e0c96bcb50 Author: Jeff Dike <jd...@ad...> Date: Tue Oct 16 01:26:44 2007 -0700 uml: stop using libc asm/page.h Remove includes of asm/page.h from libc code. This header seems to be disappearing, and UML doesn't make much use of it anyway. The one use, PAGE_SHIFT in stub.h, is handled by copying the constant from the kernel side of the house in common_offsets.h. [ jdike - added arch/um/kernel/skas/clone.c for -stable ] Signed-off-by: Jeff Dike <jd...@li...> Signed-off-by: Andrew Morton <ak...@li...> Signed-off-by: Linus Torvalds <tor...@li...> --- arch/um/include/common-offsets.h | 1 + arch/um/include/sysdep-i386/stub.h | 3 +-- arch/um/kernel/skas/clone.c | 1 - arch/um/os-Linux/main.c | 1 - arch/um/os-Linux/skas/mem.c | 1 - arch/um/os-Linux/start_up.c | 1 - arch/um/os-Linux/tt.c | 1 - 7 files changed, 2 insertions(+), 7 deletions(-) diff --git a/arch/um/include/common-offsets.h b/arch/um/include/common-offsets.h index 6eee343..2378ff4 100644 --- a/arch/um/include/common-offsets.h +++ b/arch/um/include/common-offsets.h @@ -10,6 +10,7 @@ OFFSET(HOST_TASK_PID, task_struct, pid); DEFINE(UM_KERN_PAGE_SIZE, PAGE_SIZE); DEFINE(UM_KERN_PAGE_MASK, PAGE_MASK); +DEFINE(UM_KERN_PAGE_SHIFT, PAGE_SHIFT); DEFINE(UM_NSEC_PER_SEC, NSEC_PER_SEC); DEFINE_STR(UM_KERN_EMERG, KERN_EMERG); diff --git a/arch/um/include/sysdep-i386/stub.h b/arch/um/include/sysdep-i386/stub.h index 4fffae7..19c85f3 100644 --- a/arch/um/include/sysdep-i386/stub.h +++ b/arch/um/include/sysdep-i386/stub.h @@ -9,7 +9,6 @@ #include <sys/mman.h> #include <asm/ptrace.h> #include <asm/unistd.h> -#include <asm/page.h> #include "stub-data.h" #include "kern_constants.h" #include "uml-config.h" @@ -19,7 +18,7 @@ extern void stub_clone_handler(void); #define STUB_SYSCALL_RET EAX #define STUB_MMAP_NR __NR_mmap2 -#define MMAP_OFFSET(o) ((o) >> PAGE_SHIFT) +#define MMAP_OFFSET(o) ((o) >> UM_KERN_PAGE_SHIFT) static inline long stub_syscall0(long syscall) { diff --git a/arch/um/kernel/skas/clone.c b/arch/um/kernel/skas/clone.c index 47b812b..885a125 100644 --- a/arch/um/kernel/skas/clone.c +++ b/arch/um/kernel/skas/clone.c @@ -3,7 +3,6 @@ #include <sys/mman.h> #include <sys/time.h> #include <asm/unistd.h> -#include <asm/page.h> #include "ptrace_user.h" #include "skas.h" #include "stub-data.h" diff --git a/arch/um/os-Linux/main.c b/arch/um/os-Linux/main.c index e85f499..919c25b 100644 --- a/arch/um/os-Linux/main.c +++ b/arch/um/os-Linux/main.c @@ -12,7 +12,6 @@ #include <sys/resource.h> #include <sys/mman.h> #include <sys/user.h> -#include <asm/page.h> #include "kern_util.h" #include "as-layout.h" #include "mem_user.h" diff --git a/arch/um/os-Linux/skas/mem.c b/arch/um/os-Linux/skas/mem.c index 0f7df4e..9fbf210 100644 --- a/arch/um/os-Linux/skas/mem.c +++ b/arch/um/os-Linux/skas/mem.c @@ -9,7 +9,6 @@ #include <unistd.h> #include <sys/mman.h> #include <sys/wait.h> -#include <asm/page.h> #include <asm/unistd.h> #include "mem_user.h" #include "mem.h" diff --git a/arch/um/os-Linux/start_up.c b/arch/um/os-Linux/start_up.c index 46f6139..f4f2981 100644 --- a/arch/um/os-Linux/start_up.c +++ b/arch/um/os-Linux/start_up.c @@ -19,7 +19,6 @@ #include <sys/mman.h> #include <sys/resource.h> #include <asm/unistd.h> -#include <asm/page.h> #include <sys/types.h> #include "kern_util.h" #include "user.h" diff --git a/arch/um/os-Linux/tt.c b/arch/um/os-Linux/tt.c index bcf9359..5dc113d 100644 --- a/arch/um/os-Linux/tt.c +++ b/arch/um/os-Linux/tt.c @@ -17,7 +17,6 @@ #include <sys/mman.h> #include <asm/ptrace.h> #include <asm/unistd.h> -#include <asm/page.h> #include "kern_util.h" #include "user.h" #include "signal_kern.h" |
From: <gr...@su...> - 2007-11-14 18:58:30
|
This is a note to let you know that we have just queued up the patch titled Subject: UML - Stop using libc asm/page.h to the 2.6.23-stable tree. Its filename is uml-stop-using-libc-asm-page.h.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... Thu Nov 1 12:53:55 2007 From: Jeff Dike <jd...@ad...> Date: Thu, 1 Nov 2007 15:53:25 -0400 Subject: UML - Stop using libc asm/page.h To: st...@ke... Cc: LKML <lin...@vg...>, uml-devel <use...@li...> Message-ID: <200...@c2...> Content-Disposition: inline From: Jeff Dike <jd...@ad...> commit 71f926f2ea61994470a53c9e11d3ef993197cada in mainline. uml: stop using libc asm/page.h Remove includes of asm/page.h from libc code. This header seems to be disappearing, and UML doesn't make much use of it anyway. The one use, PAGE_SHIFT in stub.h, is handled by copying the constant from the kernel side of the house in common_offsets.h. [ jdike - added arch/um/kernel/skas/clone.c for -stable ] 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/include/common-offsets.h | 1 + arch/um/include/sysdep-i386/stub.h | 3 +-- arch/um/kernel/skas/clone.c | 1 - arch/um/os-Linux/main.c | 1 - arch/um/os-Linux/skas/mem.c | 1 - arch/um/os-Linux/start_up.c | 1 - arch/um/os-Linux/tt.c | 1 - 7 files changed, 2 insertions(+), 7 deletions(-) --- a/arch/um/include/common-offsets.h +++ b/arch/um/include/common-offsets.h @@ -10,6 +10,7 @@ OFFSET(HOST_TASK_PID, task_struct, pid); DEFINE(UM_KERN_PAGE_SIZE, PAGE_SIZE); DEFINE(UM_KERN_PAGE_MASK, PAGE_MASK); +DEFINE(UM_KERN_PAGE_SHIFT, PAGE_SHIFT); DEFINE(UM_NSEC_PER_SEC, NSEC_PER_SEC); DEFINE_STR(UM_KERN_EMERG, KERN_EMERG); --- a/arch/um/include/sysdep-i386/stub.h +++ b/arch/um/include/sysdep-i386/stub.h @@ -9,7 +9,6 @@ #include <sys/mman.h> #include <asm/ptrace.h> #include <asm/unistd.h> -#include <asm/page.h> #include "stub-data.h" #include "kern_constants.h" #include "uml-config.h" @@ -19,7 +18,7 @@ extern void stub_clone_handler(void); #define STUB_SYSCALL_RET EAX #define STUB_MMAP_NR __NR_mmap2 -#define MMAP_OFFSET(o) ((o) >> PAGE_SHIFT) +#define MMAP_OFFSET(o) ((o) >> UM_KERN_PAGE_SHIFT) static inline long stub_syscall0(long syscall) { --- a/arch/um/kernel/skas/clone.c +++ b/arch/um/kernel/skas/clone.c @@ -3,7 +3,6 @@ #include <sys/mman.h> #include <sys/time.h> #include <asm/unistd.h> -#include <asm/page.h> #include "ptrace_user.h" #include "skas.h" #include "stub-data.h" --- a/arch/um/os-Linux/main.c +++ b/arch/um/os-Linux/main.c @@ -12,7 +12,6 @@ #include <sys/resource.h> #include <sys/mman.h> #include <sys/user.h> -#include <asm/page.h> #include "kern_util.h" #include "as-layout.h" #include "mem_user.h" --- a/arch/um/os-Linux/skas/mem.c +++ b/arch/um/os-Linux/skas/mem.c @@ -9,7 +9,6 @@ #include <unistd.h> #include <sys/mman.h> #include <sys/wait.h> -#include <asm/page.h> #include <asm/unistd.h> #include "mem_user.h" #include "mem.h" --- a/arch/um/os-Linux/start_up.c +++ b/arch/um/os-Linux/start_up.c @@ -19,7 +19,6 @@ #include <sys/mman.h> #include <sys/resource.h> #include <asm/unistd.h> -#include <asm/page.h> #include <sys/types.h> #include "kern_util.h" #include "user.h" --- a/arch/um/os-Linux/tt.c +++ b/arch/um/os-Linux/tt.c @@ -17,7 +17,6 @@ #include <sys/mman.h> #include <asm/ptrace.h> #include <asm/unistd.h> -#include <asm/page.h> #include "kern_util.h" #include "user.h" #include "signal_kern.h" Patches currently in stable-queue which might be from jd...@ad... are queue-2.6.23/uml-stop-using-libc-asm-page.h.patch queue-2.6.23/uml-fix-kernel-vs-libc-symbols-clash.patch queue-2.6.23/uml-stop-using-libc-asm-user.h.patch |
From: Greg KH <gr...@su...> - 2007-11-15 06:16:37
|
-stable review patch. If anyone has any objections, please let us know. ------------------ From: Jeff Dike <jd...@ad...> commit 71f926f2ea61994470a53c9e11d3ef993197cada in mainline. uml: stop using libc asm/page.h Remove includes of asm/page.h from libc code. This header seems to be disappearing, and UML doesn't make much use of it anyway. The one use, PAGE_SHIFT in stub.h, is handled by copying the constant from the kernel side of the house in common_offsets.h. [ jdike - added arch/um/kernel/skas/clone.c for -stable ] 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/include/common-offsets.h | 1 + arch/um/include/sysdep-i386/stub.h | 3 +-- arch/um/kernel/skas/clone.c | 1 - arch/um/os-Linux/main.c | 1 - arch/um/os-Linux/skas/mem.c | 1 - arch/um/os-Linux/start_up.c | 1 - arch/um/os-Linux/tt.c | 1 - 7 files changed, 2 insertions(+), 7 deletions(-) --- a/arch/um/include/common-offsets.h +++ b/arch/um/include/common-offsets.h @@ -10,6 +10,7 @@ OFFSET(HOST_TASK_PID, task_struct, pid); DEFINE(UM_KERN_PAGE_SIZE, PAGE_SIZE); DEFINE(UM_KERN_PAGE_MASK, PAGE_MASK); +DEFINE(UM_KERN_PAGE_SHIFT, PAGE_SHIFT); DEFINE(UM_NSEC_PER_SEC, NSEC_PER_SEC); DEFINE_STR(UM_KERN_EMERG, KERN_EMERG); --- a/arch/um/include/sysdep-i386/stub.h +++ b/arch/um/include/sysdep-i386/stub.h @@ -9,7 +9,6 @@ #include <sys/mman.h> #include <asm/ptrace.h> #include <asm/unistd.h> -#include <asm/page.h> #include "stub-data.h" #include "kern_constants.h" #include "uml-config.h" @@ -19,7 +18,7 @@ extern void stub_clone_handler(void); #define STUB_SYSCALL_RET EAX #define STUB_MMAP_NR __NR_mmap2 -#define MMAP_OFFSET(o) ((o) >> PAGE_SHIFT) +#define MMAP_OFFSET(o) ((o) >> UM_KERN_PAGE_SHIFT) static inline long stub_syscall0(long syscall) { --- a/arch/um/kernel/skas/clone.c +++ b/arch/um/kernel/skas/clone.c @@ -3,7 +3,6 @@ #include <sys/mman.h> #include <sys/time.h> #include <asm/unistd.h> -#include <asm/page.h> #include "ptrace_user.h" #include "skas.h" #include "stub-data.h" --- a/arch/um/os-Linux/main.c +++ b/arch/um/os-Linux/main.c @@ -12,7 +12,6 @@ #include <sys/resource.h> #include <sys/mman.h> #include <sys/user.h> -#include <asm/page.h> #include "kern_util.h" #include "as-layout.h" #include "mem_user.h" --- a/arch/um/os-Linux/skas/mem.c +++ b/arch/um/os-Linux/skas/mem.c @@ -9,7 +9,6 @@ #include <unistd.h> #include <sys/mman.h> #include <sys/wait.h> -#include <asm/page.h> #include <asm/unistd.h> #include "mem_user.h" #include "mem.h" --- a/arch/um/os-Linux/start_up.c +++ b/arch/um/os-Linux/start_up.c @@ -19,7 +19,6 @@ #include <sys/mman.h> #include <sys/resource.h> #include <asm/unistd.h> -#include <asm/page.h> #include <sys/types.h> #include "kern_util.h" #include "user.h" --- a/arch/um/os-Linux/tt.c +++ b/arch/um/os-Linux/tt.c @@ -17,7 +17,6 @@ #include <sys/mman.h> #include <asm/ptrace.h> #include <asm/unistd.h> -#include <asm/page.h> #include "kern_util.h" #include "user.h" #include "signal_kern.h" -- |
From: Greg KH <gr...@su...> - 2007-11-15 06:16:37
|
-stable review patch. If anyone has any objections, please let us know. ------------------ From: Jeff Dike <jd...@ad...> commit 818f6ef407b448cef63294b9d0f6f8a2af9cb817 in mainline. uml: fix an IPV6 libc vs kernel symbol clash On some systems, with IPV6 configured, there is a clash between the kernel's in6addr_any and the one in libc. This is handled in the usual (gross) way of defining the kernel symbol out of the way on the gcc command line. 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/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --- a/arch/um/Makefile +++ b/arch/um/Makefile @@ -60,7 +60,8 @@ SYS_DIR := $(ARCH_DIR)/include/sysdep-$ CFLAGS += $(CFLAGS-y) -D__arch_um__ -DSUBARCH=\"$(SUBARCH)\" \ $(ARCH_INCLUDE) $(MODE_INCLUDE) -Dvmap=kernel_vmap \ - -Din6addr_loopback=kernel_in6addr_loopback + -Din6addr_loopback=kernel_in6addr_loopback \ + -Din6addr_any=kernel_in6addr_any AFLAGS += $(ARCH_INCLUDE) -- |
From: Greg KH <gr...@su...> - 2007-11-15 06:16:41
|
-stable review patch. If anyone has any objections, please let us know. ------------------ From: Jeff Dike <jd...@ad...> commit 189872f968def833727b6bfef83ebd7440c538e6 in mainline. uml: don't use glibc asm/user.h Stop including asm/user.h from libc - it seems to be disappearing from distros. It's replaced with sys/user.h which defines user_fpregs_struct and user_fpxregs_struct instead of user_i387_struct and struct user_fxsr_struct on i386. As a bonus, on x86_64, I get to dump some stupid typedefs which were needed in order to get asm/user.h to compile. 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/sys-i386/user-offsets.c | 6 +++--- arch/um/sys-x86_64/user-offsets.c | 9 +-------- 2 files changed, 4 insertions(+), 11 deletions(-) --- a/arch/um/sys-i386/user-offsets.c +++ b/arch/um/sys-i386/user-offsets.c @@ -2,9 +2,9 @@ #include <stddef.h> #include <signal.h> #include <sys/poll.h> +#include <sys/user.h> #include <sys/mman.h> #include <asm/ptrace.h> -#include <asm/user.h> #define DEFINE(sym, val) \ asm volatile("\n->" #sym " %0 " #val : : "i" (val)) @@ -48,8 +48,8 @@ void foo(void) OFFSET(HOST_SC_FP_ST, _fpstate, _st); OFFSET(HOST_SC_FXSR_ENV, _fpstate, _fxsr_env); - DEFINE_LONGS(HOST_FP_SIZE, sizeof(struct user_i387_struct)); - DEFINE_LONGS(HOST_XFP_SIZE, sizeof(struct user_fxsr_struct)); + DEFINE_LONGS(HOST_FP_SIZE, sizeof(struct user_fpregs_struct)); + DEFINE_LONGS(HOST_XFP_SIZE, sizeof(struct user_fpxregs_struct)); DEFINE(HOST_IP, EIP); DEFINE(HOST_SP, UESP); --- a/arch/um/sys-x86_64/user-offsets.c +++ b/arch/um/sys-x86_64/user-offsets.c @@ -3,17 +3,10 @@ #include <signal.h> #include <sys/poll.h> #include <sys/mman.h> +#include <sys/user.h> #define __FRAME_OFFSETS #include <asm/ptrace.h> #include <asm/types.h> -/* For some reason, x86_64 defines u64 and u32 only in <pci/types.h>, which I - * refuse to include here, even though they're used throughout the headers. - * These are used in asm/user.h, and that include can't be avoided because of - * the sizeof(struct user_regs_struct) below. - */ -typedef __u64 u64; -typedef __u32 u32; -#include <asm/user.h> #define DEFINE(sym, val) \ asm volatile("\n->" #sym " %0 " #val : : "i" (val)) -- |
From: Greg KH <gr...@su...> - 2007-11-15 06:16:46
|
-stable review patch. If anyone has any objections, please let us know. ------------------ From: Lepton Wu <yth...@gm...> commit a24864a1d52a97e345a6bd4862a057f98364d098 uml: definitively kill subprocesses on panic In a stock 2.6.22.6 kernel, poweroff a user mode linux guest (2.6.22.6 running in skas0 mode) will halt the host linux. I think the reason is the kernel thread abort because of a bug. Then the sys_reboot in process of user mode linux guest is not trapped by the user mode linux kernel and is executed by host. I think it is better to make sure all of our children process to quit when user mode linux kernel abort. [ jdike - the kernel process needs to ignore SIGTERM, plus the waitpid/kill loop is needed to make sure that all of our children are dead before the kernel exits ] Signed-off-by: Lepton Wu <yth...@gm...> 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/skas/process.c | 2 +- arch/um/os-Linux/util.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) --- a/arch/um/os-Linux/skas/process.c +++ b/arch/um/os-Linux/skas/process.c @@ -182,7 +182,7 @@ static int userspace_tramp(void *stack) ptrace(PTRACE_TRACEME, 0, 0, 0); - init_new_thread_signals(); + signal(SIGTERM, SIG_DFL); err = set_interval(1); if(err) panic("userspace_tramp - setting timer failed, errno = %d\n", --- a/arch/um/os-Linux/util.c +++ b/arch/um/os-Linux/util.c @@ -105,6 +105,44 @@ int setjmp_wrapper(void (*proc)(void *, void os_dump_core(void) { + int pid; + signal(SIGSEGV, SIG_DFL); + + /* + * We are about to SIGTERM this entire process group to ensure that + * nothing is around to run after the kernel exits. The + * kernel wants to abort, not die through SIGTERM, so we + * ignore it here. + */ + + signal(SIGTERM, SIG_IGN); + kill(0, SIGTERM); + /* + * Most of the other processes associated with this UML are + * likely sTopped, so give them a SIGCONT so they see the + * SIGTERM. + */ + kill(0, SIGCONT); + + /* + * Now, having sent signals to everyone but us, make sure they + * die by ptrace. Processes can survive what's been done to + * them so far - the mechanism I understand is receiving a + * SIGSEGV and segfaulting immediately upon return. There is + * always a SIGSEGV pending, and (I'm guessing) signals are + * processed in numeric order so the SIGTERM (signal 15 vs + * SIGSEGV being signal 11) is never handled. + * + * Run a waitpid loop until we get some kind of error. + * Hopefully, it's ECHILD, but there's not a lot we can do if + * it's something else. Tell os_kill_ptraced_process not to + * wait for the child to report its death because there's + * nothing reasonable to do if that fails. + */ + + while ((pid = waitpid(-1, NULL, WNOHANG)) > 0) + os_kill_ptraced_process(pid, 0); + abort(); } -- |