kernel_optimize_test/arch/um
Paul Pluzhnikov 13e165baf6 uml: kernels on {i386,x86_64} produce bad coredumps
One of our users reported that when a user-level program SIGSEGVs under
UML kernel, the resulting core dump is not very usable.

I have reproduced that with the latest kernel:

  make ARCH=um defconfig; make ARCH=um

Run the resulting kernel, then "inside" run this program:

#include <pthread.h>

void *fn(void *p)
{
 abort();
}

int main()
{
 pthread_t tid;
 pthread_create(&tid, 0, fn, 0);
 pthread_join(tid, 0);
 return 0;
}

Analyze the coredump with GDB. Here is what you'll see:

sudo gdb -q -ex 'set solib-absolute-prefix ../root_fs' -ex 'file ../root_fs/var/tmp/mt-abort' -ex 'core ../root_fs/var/tmp/core.762'
Reading symbols from /usr/local/google/root_fs/var/tmp/mt-abort...done.
[New Thread 763]
[New Thread 762]
Core was generated by `./mt-abort'.
Program terminated with signal 6, Aborted.
#0  0x0000000040255250 in raise () from ../root_fs/lib64/libc.so.6
(gdb) info thread
  2 Thread 762  0x0000000000000000 in ?? ()
* 1 Thread 763  0x0000000040255250 in raise () from ../root_fs/lib64/libc.so.6

Note that thread#2 looks funny.

(gdb) thread 2
[Switching to thread 2 (Thread 762)]#0  0x0000000000000000 in ?? ()
(gdb) info reg
rax            0x0      0
rbx            0x0      0
rcx            0x0      0
rdx            0x0      0
rsi            0x0      0
rdi            0x0      0
rbp            0x0      0x0
rsp            0x0      0x0
r8             0x0      0
r9             0x0      0
r10            0x0      0
r11            0x0      0
r12            0x0      0
r13            0x0      0
r14            0x0      0
r15            0x0      0
rip            0x0      0
eflags         0x0      [ ]
cs             0x0      0
ss             0x0      0
ds             0x0      0
es             0x0      0
fs             0x0      0
gs             0x0      0

Examining the core shows that NT_PRSTATUS notes for all threads other than
the one that crashed are zeroed out.

I believe this is happening because neither ELF_CORE_COPY_TASK_REGS nor
task_pt_regs are defined under ARCH=um, and so elf_core_copy_task_regs()
becomes a no-op.

Attached patch fixes this for SUBARCH={x86_64,i386}.

Signed-off-by: Paul Pluzhnikov <ppluzhnikov@google.com>
Cc: Jeff Dike <jdike@addtoit.com>
Acked-by: WANG Cong <xiyou.wangcong@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-03-22 17:44:09 -07:00
..
drivers Merge branch 'core-locking-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-03-15 18:28:30 -07:00
include mm: NUMA aware alloc_task_struct_node() 2011-03-22 17:44:01 -07:00
kernel um: Use proper accessors in show_interrupts() 2011-02-14 19:37:40 +01:00
os-Linux um: fix global timer issue when using CONFIG_NO_HZ 2010-10-26 16:52:03 -07:00
scripts uml: throw out CONFIG_MODE_TT 2007-10-16 09:43:05 -07:00
sys-i386 uml: kernels on {i386,x86_64} produce bad coredumps 2011-03-22 17:44:09 -07:00
sys-ia64 uml: remove useless comments 2009-04-01 08:59:17 -07:00
sys-ppc um: change to new flag variables 2011-03-17 14:02:57 +01:00
sys-x86_64 uml: kernels on {i386,x86_64} produce bad coredumps 2011-03-22 17:44:09 -07:00
.gitignore um: tell git to ignore generated files 2010-03-06 11:26:28 -08:00
defconfig kconfig: rename CONFIG_EMBEDDED to CONFIG_EXPERT 2011-01-20 17:02:05 -08:00
Kconfig.char sound: make OSS sound core optional 2008-08-29 10:06:21 +02:00
Kconfig.common um: Select GENERIC_HARDIRQS_NO_DEPRECATED 2011-02-14 19:37:40 +01:00
Kconfig.debug uml: GPROF needs to depend on FRAME_POINTER 2008-02-05 09:44:25 -08:00
Kconfig.net uml: fix URLs in Kconfig and help strings 2008-02-05 09:44:25 -08:00
Kconfig.rest uml: kill a kconfig warning 2009-04-21 13:41:50 -07:00
Kconfig.um genirq: Remove __do_IRQ 2011-01-21 11:55:31 +01:00
Kconfig.x86 x86: Remove dead config option X86_CPU 2011-03-09 10:39:36 +01:00
Makefile kbuild: move asm-offsets.h to include/generated 2009-12-12 13:08:14 +01:00
Makefile-i386 [UML] fix gcc ICEs and unresolved externs 2008-07-07 10:53:10 -07:00
Makefile-ia64
Makefile-os-Linux x86, um: get rid of arch/um/os symlink 2008-10-22 22:55:22 -07:00
Makefile-ppc
Makefile-skas [PATCH] uml makefiles sanitized 2005-09-29 08:46:26 -07:00
Makefile-x86_64 [UML] fix gcc ICEs and unresolved externs 2008-07-07 10:53:10 -07:00