android_kernel_xiaomi_sdm845/arch
Jeff Dike 3e6f2ac480 uml: kill processes instead of panicing kernel
UML was panicing in the case of failures of libc calls which shouldn't happen.
 This is an overreaction since a failure from libc doesn't normally mean that
kernel data structures are in an unknown state.  Instead, the current process
should just be killed if there is no way to recover.

The case that prompted this was a failure of PTRACE_SETREGS restoring the same
state that was read by PTRACE_GETREGS.  It appears that when a process tries
to load a bogus value into a segment register, it segfaults (as expected) and
the value is actually loaded and is seen by PTRACE_GETREGS (not expected).

This case is fixed by forcing a fatal SIGSEGV on the process so that it
immediately dies.  fatal_sigsegv was added for this purpose.  It was declared
as noreturn, so in order to pursuade gcc that it actually does not return, I
added a call to os_dump_core (and declared it noreturn) so that I get a core
file if somehow the process survives.

All other calls in arch/um/os-Linux/skas/process.c got the same treatment,
with failures causing the process to die instead of a kernel panic, with some
exceptions.

userspace_tramp exits with status 1 if anything goes wrong there.  That will
cause start_userspace to return an error.  copy_context_skas0 and
map_stub_pages also now return errors instead of panicing.  Callers of thes
functions were changed to check for errors and do something appropriate.
Usually that's to return an error to their callers.
check_skas3_ptrace_faultinfo just exits since that's too early to do anything
else.

save_registers, restore_registers, and init_registers now return status
instead of panicing on failure, with their callers doing something
appropriate.

There were also duplicate declarations of save_registers and restore_registers
in os.h - these are gone.

I noticed and fixed up some whitespace damage.

Signed-off-by: Jeff Dike <jdike@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-02-05 09:44:28 -08:00
..
alpha alpha: kill deprecated virt_to_bus 2008-02-05 09:44:21 -08:00
arm add mm argument to pte/pmd/pud/pgd_free 2008-02-05 09:44:18 -08:00
avr32 gpiolib: avr32 at32ap platform support 2008-02-05 09:44:13 -08:00
blackfin timerfd: new timerfd API 2008-02-05 09:44:07 -08:00
cris arch/cris: add a missing iounmap 2008-02-05 09:44:24 -08:00
frv frv: use find_task_by_vpid in cxn_pin_by_pid 2008-02-05 09:44:20 -08:00
h8300 Merge git://git.kernel.org/pub/scm/linux/kernel/git/bunk/trivial 2008-02-04 07:58:52 -08:00
ia64 iommu sg merging: IA64: make sba_iommu respect the segment size limits 2008-02-05 09:44:10 -08:00
m32r m32r: remove dead config symbols from M32R code 2008-02-05 09:44:08 -08:00
m68k mac68k: remove dead MAC_ADBKEYCODES 2008-02-05 09:44:24 -08:00
m68knommu m68knommu: remove duplicate exports 2008-02-05 09:44:21 -08:00
mips timerfd: new timerfd API 2008-02-05 09:44:07 -08:00
parisc Merge git://git.kernel.org/pub/scm/linux/kernel/git/bunk/trivial 2008-02-04 07:58:52 -08:00
powerpc add mm argument to pte/pmd/pud/pgd_free 2008-02-05 09:44:18 -08:00
ppc add mm argument to pte/pmd/pud/pgd_free 2008-02-05 09:44:18 -08:00
s390 timerfd: new timerfd API 2008-02-05 09:44:07 -08:00
sh Merge git://git.kernel.org/pub/scm/linux/kernel/git/bunk/trivial 2008-02-04 07:58:52 -08:00
sparc timerfd: new timerfd API 2008-02-05 09:44:07 -08:00
sparc64 iommu sg merging: sparc64: make iommu respect the segment size limits 2008-02-05 09:44:10 -08:00
um uml: kill processes instead of panicing kernel 2008-02-05 09:44:28 -08:00
v850 Move Kconfig.instrumentation to arch/Kconfig and init/Kconfig 2008-02-03 08:58:08 +01:00
x86 add mm argument to pte/pmd/pud/pgd_free 2008-02-05 09:44:18 -08:00
xtensa Move Kconfig.instrumentation to arch/Kconfig and init/Kconfig 2008-02-03 08:58:08 +01:00
.gitignore arch: Ignore arch/i386 and arch/x86_64 2008-01-19 21:29:39 -08:00
Kconfig Move Kconfig.instrumentation to arch/Kconfig and init/Kconfig 2008-02-03 08:58:08 +01:00