linux/arch/s390/include/asm
Sven Schnelle b61b159512 s390: add stack for machine check handler
The previous code used the normal kernel stack for machine checks.
This is problematic when a machine check interrupts a system call
or interrupt handler right at the beginning where registers are set up.

Assume system_call is interrupted at the first instruction and a machine
check is triggered. The machine check handler is called, checks the PSW
to see whether it is coming from user space, notices that it is already
in kernel mode but %r15 still contains the user space stack. This would
lead to a kernel crash.

There are basically two ways of fixing that: Either using the 'critical
cleanup' approach which compares the address in the PSW to see whether
it is already at a point where the stack has been set up, or use an extra
stack for the machine check handler.

For simplicity, we will go with the second approach and allocate an extra
stack. This adds some memory overhead for large systems, but usually large
system have plenty of memory so this isn't really a concern. But it keeps
the mchk stack setup simple and less error prone.

Fixes: 0b0ed657fe ("s390: remove critical section cleanup from entry.S")
Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Cc: <stable@kernel.org> # v5.8+
Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
2021-02-13 17:17:53 +01:00
..
fpu s390: convert to generic entry 2021-01-19 12:29:26 +01:00
trace
vdso s390/vdso: implement generic vdso time namespace support 2021-02-09 15:57:05 +01:00
airq.h s390/airq: use DMA memory for adapter interrupts 2019-06-15 12:25:05 +02:00
alternative-asm.h
alternative.h s390/alternatives: add alternative_input() / alternative_io() 2021-02-09 15:57:06 +01:00
ap.h s390/ap: remove unneeded semicolon 2021-02-09 15:57:04 +01:00
appldata.h s390/appldata: pass parameter list pointer to appldata_asm 2018-10-09 11:20:50 +02:00
archrandom.h s390/crypto: add arch_get_random_long() support 2020-12-10 21:02:08 +01:00
asm-const.h s390/kernel: unify EX_TABLE* implementations 2020-07-20 10:55:45 +02:00
asm-prototypes.h
atomic_ops.h s390/atomic,bitops: mark function(s) __always_inline 2019-10-04 16:37:33 +02:00
atomic.h s390/atomic: remove small optimization to fix clang build 2021-01-19 12:29:26 +01:00
barrier.h
bitops.h s390/bitops: remove small optimization to fix clang build 2021-01-19 12:29:26 +01:00
boot_data.h s390/ipl: read IPL report at early boot 2019-04-26 12:34:05 +02:00
bug.h printk: Make linux/printk.h self-contained 2020-07-27 17:46:24 +09:00
bugs.h
cache.h treewide: Convert macro and uses of __section(foo) to __section("foo") 2020-10-25 14:51:49 -07:00
ccwdev.h for-5.11/drivers-2020-12-14 2020-12-16 13:09:32 -08:00
ccwgroup.h s390/net: remove pm ops from ccwgroup drivers 2020-05-19 12:48:39 -07:00
checksum.h s390 updates for the 5.10 merge window 2020-10-16 12:36:38 -07:00
chpid.h
chsc.h s390/cio: Add new Operation Code OC3 to PNSO 2020-09-15 13:21:46 -07:00
cio.h for-5.11/drivers-2020-12-14 2020-12-16 13:09:32 -08:00
clocksource.h s390: convert to GENERIC_VDSO 2020-08-26 18:47:21 +02:00
clp.h s390/pci: Implement ioremap_wc/prot() with MIO 2020-09-14 10:30:07 +02:00
cmb.h
cmpxchg.h
compat.h compat: lift compat_s64 and compat_u64 to <asm-generic/compat.h> 2020-09-17 13:00:46 -04:00
cpacf.h s390: mark __cpacf_query() as __always_inline 2019-10-04 16:37:33 +02:00
cpcmd.h
cpu_mcf.h s390/cpum_cf_diag: Add support for s390 counter facility diagnostic trace 2019-02-22 09:19:56 +01:00
cpu_mf-insn.h s390/cpu_mf: add store cpu counter multiple instruction support 2019-02-22 09:19:52 +01:00
cpu_mf.h s390/cpum_sf: Replace function name in debug statements 2019-11-30 10:52:46 +01:00
cpu.h
cpufeature.h
cputime.h s390: convert to generic entry 2021-01-19 12:29:26 +01:00
crw.h
css_chars.h s390/cio: Add new Operation Code OC3 to PNSO 2020-09-15 13:21:46 -07:00
ctl_reg.h s390/early: move control registers setup in C code 2019-11-20 12:58:12 +01:00
current.h
debug.h s390/debug: debug feature version 3 2020-08-11 18:16:43 +02:00
delay.h s390/delay: remove udelay_simple() 2020-12-16 14:55:49 +01:00
diag.h s390/setup: diag 318: refactor struct 2020-06-23 09:16:48 +02:00
dis.h
dma.h
dwarf.h
eadm.h
ebcdic.h s390: fix clang -Wpointer-sign warnigns in boot code 2019-05-03 17:17:58 +02:00
elf.h s390: convert to generic entry 2021-01-19 12:29:26 +01:00
entry-common.h s390: convert to generic entry 2021-01-19 12:29:26 +01:00
exec.h
extable.h s390/kernel: expand exception table logic to allow new handling options 2020-07-20 10:55:50 +02:00
extmem.h
facility.h s390: fix stfle zero padding 2019-06-19 17:54:27 +02:00
fcx.h
ftrace.h s390/ftrace: assume -mhotpatch or -mrecord-mcount always available 2020-11-20 19:19:11 +01:00
futex.h s390/mm: remove set_fs / rework address space handling 2020-11-23 12:01:12 +01:00
gmap.h s390: remove orphaned function declarations 2020-09-30 12:09:54 +02:00
hardirq.h
hugetlb.h mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00
hw_irq.h s390/irq: make init_ext_interrupts static 2020-03-11 14:18:44 +01:00
idals.h s390/idal: use struct_size() in kmalloc() 2019-06-04 15:03:18 +02:00
idle.h s390: convert to generic entry 2021-01-19 12:29:26 +01:00
io.h s390/pci: Implement ioremap_wc/prot() with MIO 2020-09-14 10:30:07 +02:00
ipl.h s390/nvme: support firmware-assisted dump to NVMe disks 2020-10-02 14:40:48 +02:00
irq.h s390/pci: gather statistics for floating vs directed irqs 2019-04-29 10:47:01 +02:00
irqflags.h
isc.h KVM: s390: add gib_alert_irq_handler() 2019-02-05 14:29:23 +01:00
itcw.h
jump_label.h s390/jump_label: use "i" constraint for clang 2020-01-22 13:05:35 +01:00
kasan.h s390/kasan: move memory needs estimation into a function 2020-11-09 11:20:59 +01:00
Kbuild local64.h: make <asm/local64.h> mandatory 2020-12-29 15:36:49 -08:00
kdebug.h
kexec.h s390/kernel: build a relocatable kernel 2019-04-29 10:47:10 +02:00
kprobes.h s390: support KPROBES_ON_FTRACE 2020-01-30 13:07:55 +01:00
kvm_host.h KVM: s390: track synchronous pfault events in kvm_stat 2020-12-10 14:20:26 +01:00
kvm_para.h
linkage.h s390/kernel: expand exception table logic to allow new handling options 2020-07-20 10:55:50 +02:00
livepatch.h livepatch: Use the default ftrace_ops instead of REGS when ARGS is available 2020-11-13 12:15:28 -05:00
lowcore.h s390: add stack for machine check handler 2021-02-13 17:17:53 +01:00
mem_detect.h s390/mem_detect: provide single get_mem_detect_end 2019-08-26 12:51:18 +02:00
mem_encrypt.h s390/mm: Remove sev_active() function 2019-08-09 22:52:11 +10:00
mmu_context.h asm-generic: mmu-context cleanup 2020-12-15 23:58:04 -08:00
mmu.h s390 updates for the 5.7 merge window 2020-04-04 09:45:50 -07:00
mmzone.h
module.h
nmi.h s390: convert to generic entry 2021-01-19 12:29:26 +01:00
nospec-branch.h
nospec-insn.h s390/nospec: rename assembler generated expoline thunks 2019-05-02 13:54:11 +02:00
numa.h s390/mm: remove fake numa support 2020-02-27 16:02:21 +01:00
os_info.h
page-states.h
page.h mm/vma: define a default value for VM_DATA_DEFAULT_FLAGS 2020-04-10 15:36:21 -07:00
pci_clp.h s390/pci: Implement ioremap_wc/prot() with MIO 2020-09-14 10:30:07 +02:00
pci_debug.h
pci_dma.h s390/pci: remove unused functions 2020-06-29 16:32:09 +02:00
pci_insn.h s390: fix setting of mio addressing control 2019-07-11 20:40:02 +02:00
pci_io.h s390/pci: Fix s390_mmio_read/write with MIO 2020-05-14 23:21:37 +02:00
pci.h s390/pci: refactor zpci_create_device() 2021-02-09 15:57:04 +01:00
percpu.h s390: don't trace preemption in percpu macros 2020-08-26 18:07:04 +02:00
perf_event.h s390: implement perf_arch_fetch_caller_regs 2019-11-30 10:52:44 +01:00
pgalloc.h s390: remove orphaned function declarations 2020-09-30 12:09:54 +02:00
pgtable.h s390/mm: use invalid asce instead of kernel asce 2020-11-23 12:01:12 +01:00
pkey.h s390/pkey: pkey cleanup: narrow in-kernel API, fix some variable types 2019-08-21 12:58:53 +02:00
pnet.h s390/net: move pnet constants 2019-02-07 18:06:18 -08:00
preempt.h s390: remove asmlinkage 2021-01-19 12:29:26 +01:00
processor.h s390: pass struct pt_regs instead of registers to syscalls 2021-01-19 12:29:27 +01:00
ptdump.h s390: add ARCH_HAS_DEBUG_WX support 2020-09-14 11:38:35 +02:00
ptrace.h s390: convert to generic entry 2021-01-19 12:29:26 +01:00
purgatory.h s390/purgatory: Remove duplicate variable definitions 2018-07-06 08:47:51 +02:00
qdio.h s390/qdio: remove Input tasklet code 2021-02-09 15:57:04 +01:00
runtime_instr.h
schid.h
sclp.h s390/sclp: provide extended sccb support 2020-11-18 12:16:02 +01:00
scsw.h s390: Simplify the calculation of variables 2021-02-09 15:57:04 +01:00
seccomp.h s390: Enable seccomp architecture tracking 2020-11-20 11:16:35 -08:00
sections.h s390: correct __bootdata / __bootdata_preserved macros 2020-10-26 14:18:01 +01:00
serial.h
set_memory.h s390/mm,ptdump: hold cpa mutex while walking for kernel page table dump 2020-09-14 11:38:34 +02:00
setup.h s390: unify identity mapping limits handling 2020-11-20 19:19:10 +01:00
shmparam.h
signal.h
sigp.h
smp.h s390: remove orphaned function declarations 2020-09-30 12:09:54 +02:00
sparsemem.h
spinlock_types.h
spinlock.h s390/alternatives: make use of asm_inline 2019-10-31 17:20:51 +01:00
stacktrace.h s390: fix register clobbering in CALL_ON_STACK 2019-11-30 10:52:47 +01:00
stp.h s390/stp: add support for leap seconds 2020-09-26 15:51:21 +02:00
string.h s390/kasan: provide uninstrumented __strlen 2019-08-21 12:58:52 +02:00
switch_to.h
syscall_wrapper.h s390: pass struct pt_regs instead of registers to syscalls 2021-01-19 12:29:27 +01:00
syscall.h s390: convert to generic entry 2021-01-19 12:29:26 +01:00
sysinfo.h
termios.h
thread_info.h s390/thread_info.h: fix task_struct declaration warning 2021-02-09 15:57:04 +01:00
timex.h s390/time: use stcke instead of stck 2021-02-09 15:57:05 +01:00
tlb.h s390/tlb: make cleared_pXs flags consistent with generic code 2021-01-19 12:29:25 +01:00
tlbflush.h s390: remove orphaned function declarations 2020-09-30 12:09:54 +02:00
topology.h s390/numa: set node distance to LOCAL_DISTANCE 2020-08-11 18:16:35 +02:00
uaccess.h s390: convert to generic entry 2021-01-19 12:29:26 +01:00
unistd.h s390: wire up clone3 system call 2019-07-23 10:45:53 +02:00
unwind.h s390/unwind: start unwinding from reliable state 2019-11-30 10:52:48 +01:00
uprobes.h
user.h
uv.h s390/uv: add destroy page call 2020-09-14 11:38:35 +02:00
vdso.h s390/vdso: implement generic vdso time namespace support 2021-02-09 15:57:05 +01:00
vga.h
vmalloc.h mm/vmalloc: Add empty <asm/vmalloc.h> headers and use them from <linux/vmalloc.h> 2019-12-10 10:12:55 +01:00
vmlinux.lds.h s390: introduce .boot.preserved.data section 2019-04-10 17:47:09 +02:00
vtime.h s390: convert to generic entry 2021-01-19 12:29:26 +01:00
vtimer.h s390: remove orphaned function declarations 2020-09-30 12:09:54 +02:00
vx-insn.h s390: add alignment hints to vector load and store 2019-02-07 11:57:10 +01:00
xor.h