mirror_ubuntu-kernels/arch/s390/kernel
Heiko Carstens d0e810eeb3 s390/noexec: execute kexec datamover without DAT
Rebooting into a new kernel with kexec fails (system dies) if tried on
a machine that has no-execute support. Reason for this is that the so
called datamover code gets executed with DAT on (MMU is active) and
the page that contains the datamover is marked as non-executable.
Therefore when branching into the datamover an unexpected program
check happens and afterwards the machine is dead.

This can be simply avoided by disabling DAT, which also disables any
no-execute checks, just before the datamover gets executed.

In fact the first thing done by the datamover is to disable DAT. The
code in the datamover that disables DAT can be removed as well.

Thanks to Michael Holzheu and Gerald Schaefer for tracking this down.

Reviewed-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Reviewed-by: Philipp Rudo <prudo@linux.vnet.ibm.com>
Cc: Gerald Schaefer <gerald.schaefer@de.ibm.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Fixes: 57d7f939e7 ("s390: add no-execute support")
Cc: <stable@vger.kernel.org> # v4.11+
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
2017-11-10 18:58:08 +01:00
..
vdso32 s390/mm: use new mm defines instead of magic values 2017-07-26 08:25:09 +02:00
vdso64 s390/mm: use new mm defines instead of magic values 2017-07-26 08:25:09 +02:00
.gitignore s390: add various .gitignore files. 2012-05-16 14:42:41 +02:00
als.c s390/sclp: don't add new lines to each printed string 2017-02-08 14:13:20 +01:00
alternative.c s390: introduce CPU alternatives 2017-10-18 14:11:29 +02:00
asm-offsets.c s390/nmi: do register validation as early as possible 2017-10-19 17:07:40 +02:00
audit.c
audit.h
base.S s390/kdump: fix nosmt kernel parameter 2015-06-25 09:39:26 +02:00
cache.c s390/cpuinfo: show dynamic and static cpu mhz 2016-06-13 15:58:17 +02:00
compat_audit.c
compat_linux.c s390: kernel: Audit and remove any unnecessary uses of module.h 2017-02-17 07:40:31 +01:00
compat_linux.h s390: add support for vector extension 2014-10-09 09:14:13 +02:00
compat_ptrace.h [S390] ptrace cleanup 2011-01-05 12:47:31 +01:00
compat_signal.c signal: Remove kernel interal si_code magic 2017-07-24 14:30:28 -05:00
compat_wrapper.c s390/sthyi: add s390_sthyi system call 2017-10-09 11:15:36 +02:00
cpcmd.c s390/cpcmd,vmcp: avoid GFP_DMA allocations 2017-08-09 09:09:35 -04:00
crash_dump.c s390/kdump: Add final note 2017-03-28 16:54:31 +02:00
debug.c s390/debug: only write data once 2017-10-18 14:11:23 +02:00
diag.c s390/diag: add diag26c support 2017-06-20 15:44:15 -04:00
dis.c s390/disassembler: generate opcode tables from text file 2017-11-08 22:11:02 +01:00
dumpstack.c s390/mm: use new mm defines instead of magic values 2017-07-26 08:25:09 +02:00
early_printk.c s390/sclp: make early sclp code readable 2017-02-08 14:13:19 +01:00
early.c s390: fix transactional execution control register handling 2017-11-10 18:58:00 +01:00
ebcdic.c s390: kernel: Audit and remove any unnecessary uses of module.h 2017-02-17 07:40:31 +01:00
entry.h s390/sthyi: add s390_sthyi system call 2017-10-09 11:15:36 +02:00
entry.S s390/nmi: avoid using long-displacement facility 2017-11-02 12:32:46 +01:00
fpu.c s390/fpu: improve kernel_fpu_[begin|end] 2016-08-29 11:05:01 +02:00
ftrace.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2017-05-16 09:24:44 -07:00
guarded_storage.c s390/guarded storage: simplify task exit handling 2017-09-28 07:29:40 +02:00
head64.S s390/time: add support for the TOD clock epoch extension 2017-07-26 08:25:14 +02:00
head_kdump.S s390: remove 31 bit support 2015-03-25 11:49:33 +01:00
head.S s390/time: add support for the TOD clock epoch extension 2017-07-26 08:25:14 +02:00
idle.c sched/headers: Prepare to move cputime functionality from <linux/sched.h> into <linux/sched/cputime.h> 2017-03-02 08:42:39 +01:00
ipl.c s390: remove named saved segment support 2017-11-08 09:47:54 +01:00
irq.c s390/time: add support for the TOD clock epoch extension 2017-07-26 08:25:14 +02:00
jump_label.c s390: Prevent hotplug rwsem recursion 2017-05-26 10:10:46 +02:00
kdebugfs.c s390/debugfs: introduce top-level 's390' directory 2017-03-22 08:29:15 +01:00
kprobes.c s390/kprobes: remove KPROBE_SWAP_INST state 2017-10-12 07:16:50 +02:00
lgr.c s390: kernel: make lgr explicitly non-modular 2016-10-31 17:55:42 +01:00
machine_kexec.c s390/noexec: execute kexec datamover without DAT 2017-11-10 18:58:08 +01:00
Makefile s390: introduce CPU alternatives 2017-10-18 14:11:29 +02:00
mcount.S s390: move exports to definitions 2016-08-07 23:47:20 -04:00
module.c s390: introduce CPU alternatives 2017-10-18 14:11:29 +02:00
nmi.c s390/nmi: do register validation as early as possible 2017-10-19 17:07:40 +02:00
os_info.c s390: proper type casts for csum_partial invocations 2017-01-16 07:27:53 +01:00
perf_cpum_cf_events.c s390/cpum_cf: add hardware counter support for IBM z14 2017-10-26 08:23:14 +02:00
perf_cpum_cf.c s390/cpum_cf: make hw_perf_event_update() a void function 2017-03-31 07:53:35 +02:00
perf_cpum_sf.c s390/cpumf: remove superfluous nr_cpumask_bits check 2017-09-28 07:29:43 +02:00
perf_event.c s390/perf: fix null string in perf list pmu command 2017-06-12 16:26:00 +02:00
pgm_check.S s390: remove 31 bit support 2015-03-25 11:49:33 +01:00
process.c s390: fix transactional execution control register handling 2017-11-10 18:58:00 +01:00
processor.c s390/cpuinfo: show facilities as reported by stfle 2017-03-22 08:29:02 +01:00
ptrace.c s390/ctl_reg: use decoding unions in update_cr_regs 2017-10-19 17:07:36 +02:00
reipl.S s390/dump: rework CPU register dump code 2015-11-27 09:24:14 +01:00
relocate_kernel.S s390/noexec: execute kexec datamover without DAT 2017-11-10 18:58:08 +01:00
runtime_instr.c s390/runtime_instrumentation: clean up struct runtime_instr_cb 2017-09-28 07:29:40 +02:00
setup.c s390: simplify transactional execution elf hwcap handling 2017-11-09 16:54:30 +01:00
signal.c sched/headers: Prepare for new header dependencies before moving code to <linux/sched/task_stack.h> 2017-03-02 08:42:36 +01:00
smp.c s390/nmi: allocation of the extended save area 2017-10-19 17:07:39 +02:00
stacktrace.c sched/headers: Prepare for new header dependencies before moving code to <linux/sched/debug.h> 2017-03-02 08:42:34 +01:00
sthyi.c s390/sthyi: add s390_sthyi system call 2017-10-09 11:15:36 +02:00
suspend.c s390: remove named saved segment support 2017-11-08 09:47:54 +01:00
swsusp.S s390/sclp: don't add new lines to each printed string 2017-02-08 14:13:20 +01:00
sys_s390.c Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
syscalls.S s390/sthyi: add s390_sthyi system call 2017-10-09 11:15:36 +02:00
sysinfo.c S390/sysinfo: use uuid_is_null instead of opencoding it 2017-06-05 16:59:06 +02:00
time.c s390/dasd: Change unsigned long long to unsigned long 2017-08-23 13:31:51 +02:00
topology.c s390/topology: add detection of dedicated vs shared CPUs 2017-09-28 07:29:43 +02:00
trace.c s390/diag: avoid lockdep recursion 2016-02-11 13:05:56 +01:00
traps.c s390: add missing header includes for type checking 2017-06-12 16:25:55 +02:00
uprobes.c s390: rename struct psw_bits members 2017-06-12 16:26:02 +02:00
vdso.c s390/vdso: move boot_vdso_data to vdso.c 2017-10-18 14:11:36 +02:00
vmlinux.lds.S s390: remove named saved segment support 2017-11-08 09:47:54 +01:00
vtime.c s390/cputime: simplify account_system_index_scaled 2017-06-12 16:25:57 +02:00