mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2026-02-03 23:52:18 +00:00
It is currently impossible to run a user-mode linux machine inside another
user-mode linux (UML on UML). It breaks after a few instructions. When
it tries to check whether SYSEMU is installed (the inner) UML receives an
inconsistent result (from the outer UML).
This is the output of a broken attempt:
$ ./linux mem=256m ubd0=cow
Locating the bottom of the address space ... 0x0
Locating the top of the address space ... 0xc0000000
Core dump limits :
soft - 0
hard - NONE
Checking that ptrace can change system call numbers...OK
Checking ptrace new tags for syscall emulation...unsupported
Checking syscall emulation patch for ptrace...check_sysemu : expected SIGTRAP, got status = 256
$
The problem is the following:
PTRACE_SYSCALL/SINGLESTEP is currently managed inside arch_ptrace for ARCH=um.
PTRACE_SYSEMU/SUSEMU_SINGLESTEP is not captured in arch_ptrace's switch,
therefore it is erroneously passed back to ptrace_request (in
kernel/ptrace).
This simple patch simply forces ptrace to return an error on
PTRACE_SYSEMU/SUSEMU_SINGLESTEP as it is unsupported on ARCH=um, and fixes
the problem.
[akpm@linux-foundation.org: coding-style fixes]
Signed-off-by: Renzo Davoli <renzo@cs.unibo.it>
Reviewed-by: WANG Cong <xiyou.wangcong@gmail.com>
Cc: Jeff Dike <jdike@addtoit.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||
|---|---|---|
| .. | ||
| skas | ||
| asm-offsets.c | ||
| config.c.in | ||
| dyn.lds.S | ||
| exec.c | ||
| exitcode.c | ||
| gmon_syms.c | ||
| gprof_syms.c | ||
| init_task.c | ||
| initrd.c | ||
| internal.h | ||
| irq.c | ||
| ksyms.c | ||
| Makefile | ||
| mem.c | ||
| physmem.c | ||
| process.c | ||
| ptrace.c | ||
| reboot.c | ||
| sigio.c | ||
| signal.c | ||
| smp.c | ||
| syscall.c | ||
| sysrq.c | ||
| time.c | ||
| tlb.c | ||
| trap.c | ||
| uaccess.c | ||
| um_arch.c | ||
| umid.c | ||
| uml.lds.S | ||
| vmlinux.lds.S | ||