mirror-linux/arch/arm64/include/asm
Ard Biesheuvel f75a91c82d arm64: efi: Execute runtime services from a dedicated stack
commit ff7a167961 upstream.

With the introduction of PRMT in the ACPI subsystem, the EFI rts
workqueue is no longer the only caller of efi_call_virt_pointer() in the
kernel. This means the EFI runtime services lock is no longer sufficient
to manage concurrent calls into firmware, but also that firmware calls
may occur that are not marshalled via the workqueue mechanism, but
originate directly from the caller context.

For added robustness, and to ensure that the runtime services have 8 KiB
of stack space available as per the EFI spec, introduce a spinlock
protected EFI runtime stack of 8 KiB, where the spinlock also ensures
serialization between the EFI rts workqueue (which itself serializes EFI
runtime calls) and other callers of efi_call_virt_pointer().

While at it, use the stack pivot to avoid reloading the shadow call
stack pointer from the ordinary stack, as doing so could produce a
gadget to defeat it.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Cc: Lee Jones <lee@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-01-24 07:24:41 +01:00
..
stacktrace arm64: stacktrace: track hyp stacks in unwinder's address space 2022-09-09 12:30:08 +01:00
vdso arm64: vdso: use SYS_CNTVCTSS_EL0 for gettimeofday 2022-09-09 12:27:25 +01:00
xen arm/xen: Introduce xen_setup_dma_ops() 2022-06-06 08:54:33 +02:00
Kbuild arm64/sysreg: Enable automatic generation of system register definitions 2022-05-04 15:30:28 +01:00
acenv.h
acpi.h Revert "ACPI: Add memory semantics to acpi_os_map_memory()" 2021-09-23 20:39:36 +02:00
alternative-macros.h arm64: alternatives: Use vdso/bits.h instead of linux/bits.h 2022-10-05 10:44:44 +01:00
alternative.h
apple_m1_pmu.h drivers/perf: Add Apple icestorm/firestorm CPU PMU driver 2022-03-08 13:32:48 +00:00
arch_gicv3.h irqchip/gic-v3: Refactor ISB + EOIR at ack time 2022-05-15 16:38:25 +01:00
arch_timer.h arm64: Add CNT{P,V}CTSS_EL0 alternatives to cnt{p,v}ct_el0 2021-10-19 10:56:20 +01:00
archrandom.h random: handle archrandom with multiple longs 2022-07-25 13:26:14 +02:00
arm-cci.h
arm_dsu_pmu.h
asm-bug.h bug: Use normal relative pointers in 'struct bug_entry' 2022-05-19 23:46:10 +02:00
asm-extable.h arm64: extable: cleanup redundant extable type EX_TYPE_FIXUP 2022-06-28 12:11:47 +01:00
asm-offsets.h
asm-prototypes.h kasan: arm64: support specialized outlined tag mismatch checks 2021-05-26 23:31:26 +01:00
asm-uaccess.h arm64: extable: make uaaccess helper use extable type EX_TYPE_UACCESS_ERR_ZERO 2022-06-28 12:11:47 +01:00
asm_pointer_auth.h arm64/sysreg: Add _EL1 into ID_AA64ISAR2_EL1 definition names 2022-07-05 11:45:46 +01:00
assembler.h Merge branch 'for-next/alternatives' into for-next/core 2022-09-30 09:18:22 +01:00
atomic.h locking/atomic: make ARCH_ATOMIC a Kconfig symbol 2021-05-26 13:20:49 +02:00
atomic_ll_sc.h arm64: cmpxchg_double*: hazard against entire exchange variable 2023-01-18 11:58:11 +01:00
atomic_lse.h arm64: cmpxchg_double*: hazard against entire exchange variable 2023-01-18 11:58:11 +01:00
barrier.h arm64: kcsan: Support detecting more missing memory barriers 2022-06-23 18:34:59 +01:00
bitops.h include: move find.h from asm_generic to linux 2022-01-15 08:47:31 -08:00
bitrev.h
boot.h
brk-imm.h arm64: Add CFI error handling 2022-09-26 10:13:14 -07:00
bug.h
cache.h arm64: cache: Remove unused CTR_CACHE_MINLINE_MASK 2022-09-09 10:59:02 +01:00
cacheflush.h arm64: mm: Remove assembly DMA cache maintenance wrappers 2022-07-05 13:06:31 +01:00
checksum.h
clocksource.h
cmpxchg.h arm64: atomics: lse: Dereference matching size 2022-01-20 09:13:48 +00:00
compat.h asm-generic: compat: Cleanup duplicate definitions 2022-04-26 13:35:54 -07:00
compiler.h cfi: Use __builtin_function_start 2022-04-13 12:16:00 -07:00
cpu.h arm64/sme: Expose SMIDR through sysfs 2022-06-23 18:22:44 +01:00
cpu_ops.h arm64: cpuidle: remove generic cpuidle support 2022-06-23 14:19:33 +01:00
cpufeature.h Merge branch 'for-next/alternatives' into for-next/core 2022-09-30 09:18:22 +01:00
cpuidle.h arm64: cpuidle: remove generic cpuidle support 2022-06-23 14:19:33 +01:00
cputype.h arm64: Fix bit-shifting UB in the MIDR_CPU_MODEL() macro 2022-11-09 09:51:39 +00:00
current.h
daifflags.h arm64: entry: always set GIC_PRIO_PSR_I_SET during entry 2021-05-05 18:13:58 +01:00
dcc.h
debug-monitors.h arm64: Treat ESR_ELx as a 64-bit register 2022-04-29 19:26:27 +01:00
device.h
dmi.h
efi.h arm64: efi: Execute runtime services from a dedicated stack 2023-01-24 07:24:41 +01:00
el2_setup.h arm64/sysreg: Add _EL1 into ID_AA64DFR0_EL1 definition names 2022-09-16 12:38:57 +01:00
elf.h arm64: exec: Adjust affinity for compat tasks with mismatched 32-bit EL0 2021-08-20 12:33:06 +02:00
esr.h S390: 2022-05-26 14:20:14 -07:00
exception.h Merge branch 'for-next/misc' into for-next/core 2022-09-30 09:18:26 +01:00
exec.h
extable.h arm64/bpf: Remove 128MB limit for BPF JIT programs 2021-11-08 22:16:26 +01:00
fb.h
fixmap.h arm64: entry: simplify trampoline data page 2022-06-24 13:08:30 +01:00
fpsimd.h arm64/sme: Don't flush SVE register state when allocating SME storage 2022-08-23 11:29:11 +01:00
fpsimdmacros.h arm64/sme: Implement ZA context switching 2022-04-22 18:51:02 +01:00
ftrace.h treewide: Drop function_nocfi 2022-09-26 10:13:14 -07:00
futex.h arm64: extable: add a dedicated uaccess handler 2021-10-21 10:45:22 +01:00
gpr-num.h arm64: gpr-num: support W registers 2021-10-21 10:45:22 +01:00
hardirq.h
hugetlb.h mm: hugetlb: kill set_huge_swap_pte_at() 2022-07-03 18:08:50 -07:00
hw_breakpoint.h arm64/sysreg: Add _EL1 into ID_AA64DFR0_EL1 definition names 2022-09-16 12:38:57 +01:00
hwcap.h arm64/sysreg: Add hwcap for SVE EBF16 2022-09-06 18:53:52 +01:00
hyp_image.h
hyperv-tlfs.h PCI: hv: Add arm64 Hyper-V vPCI support 2022-01-12 08:24:29 -06:00
hypervisor.h arm/arm64: Probe for the presence of KVM hypervisor 2021-03-31 09:16:55 +01:00
image.h
insn-def.h arm64: move AARCH64_BREAK_FAULT into insn-def.h 2022-02-22 21:25:48 +00:00
insn.h arm64: Add LDR (literal) instruction 2022-07-11 21:04:58 +02:00
io.h asm-generic: updates for 6.0 2022-08-05 10:07:23 -07:00
irq.h arm64: irq: allow FIQs to be handled 2021-03-24 20:19:30 +00:00
irq_work.h arm64: smp: Add missing prototype for some smp.c functions 2021-03-29 10:41:42 +01:00
irqflags.h arm64: Always keep DAIF.[IF] in sync 2021-03-24 20:19:30 +00:00
jump_label.h
kasan.h
kernel-pgtable.h arm64: mm: Reserve enough pages for the initial ID map 2022-09-01 12:02:39 +01:00
kexec.h kexec: drop weak attribute from functions 2022-07-15 12:21:16 -04:00
kfence.h set_memory: allow querying whether set_direct_map_*() is actually enabled 2021-07-08 11:48:20 -07:00
kgdb.h
kprobes.h kprobes: treewide: Make it harder to refer kretprobe_trampoline directly 2021-09-30 21:24:06 -04:00
kvm_arm.h Merge branch kvm-arm64/aarch32-idreg-trap into kvmarm-master/next 2022-05-04 09:42:45 +01:00
kvm_asm.h KVM: arm64: Prepare non-protected nVHE hypervisor stacktrace 2022-07-26 10:49:27 +01:00
kvm_emulate.h KVM: arm64: Fix S1PTW handling on RO memslots 2023-01-18 11:58:10 +01:00
kvm_host.h KVM: arm64: Clear PSTATE.SS when the Software Step state was Active-pending 2022-09-19 10:48:53 +01:00
kvm_hyp.h arm64: Add support of PAuth QARMA3 architected algorithm 2022-02-25 13:38:52 +00:00
kvm_mmu.h arm64: alternatives: have callbacks take a cap 2022-09-16 17:15:03 +01:00
kvm_mte.h KVM: arm64: Save/restore MTE registers 2021-06-22 14:08:05 +01:00
kvm_pgtable.h KVM: arm64: Work out supported block level at compile time 2022-10-09 02:33:49 +01:00
kvm_pkvm.h KVM: arm64: Move host EL1 code out of hyp/ directory 2021-12-06 08:37:03 +00:00
kvm_ptrauth.h
kvm_ras.h KVM: arm64: Treat ESR_EL2 as a 64-bit register 2022-04-29 19:26:27 +01:00
kvm_types.h
linkage.h arm64: Add types to indirect called assembly functions 2022-09-26 10:13:13 -07:00
lse.h arm64: alternatives: add alternative_has_feature_*() 2022-09-16 17:15:03 +01:00
memory.h - The usual batches of cleanups from Baoquan He, Muchun Song, Miaohe 2022-08-05 16:32:45 -07:00
mman.h arm64/mm: enable ARCH_HAS_VM_GET_PAGE_PROT 2022-04-28 23:16:13 -07:00
mmu.h arm64: Add missing include of asm/cpufeature.h to asm/mmu.h 2021-12-06 08:37:03 +00:00
mmu_context.h treewide: Drop function_nocfi 2022-09-26 10:13:14 -07:00
mmzone.h
module.h Merge branches 'for-next/doc', 'for-next/sve', 'for-next/sysreg', 'for-next/gettimeofday', 'for-next/stacktrace', 'for-next/atomics', 'for-next/el1-exceptions', 'for-next/a510-erratum-2658417', 'for-next/defconfig', 'for-next/tpidr2_el0' and 'for-next/ftrace', remote-tracking branch 'arm64/for-next/perf' into for-next/core 2022-09-30 09:17:57 +01:00
module.lds.h arm64: module: remove (NOLOAD) from linker script 2022-02-25 14:06:50 +00:00
mshyperv.h arm64: hyperv: Add Hyper-V hypercall and register access utilities 2021-08-04 16:54:36 +00:00
mte-def.h arm64: mte: Define the number of bytes for storing the tags in a page 2022-02-15 22:53:29 +00:00
mte-kasan.h printk: stop including cache.h from printk.h 2022-05-13 07:20:07 -07:00
mte.h arm64: mte: move register initialization to C 2022-09-22 18:02:50 +01:00
neon-intrinsics.h
neon.h
numa.h
page-def.h
page.h arm64/mm: drop HAVE_ARCH_PFN_VALID 2021-10-01 14:54:45 +01:00
paravirt.h
paravirt_api_clock.h sched/headers: Add initial new headers as identity mappings 2022-02-23 10:58:28 +01:00
patching.h arm64: insn: decouple patching from insn code 2021-06-11 11:19:27 +01:00
pci.h asm-generic: Add new pci.h and use it 2022-07-22 17:34:57 -05:00
percpu.h printk: stop including cache.h from printk.h 2022-05-13 07:20:07 -07:00
perf_event.h arm64: perf: Consistently make all event numbers as 16-bits 2022-03-08 11:41:03 +00:00
pgalloc.h arm64: mm: Fix VM_BUG_ON(mm != &init_mm) for trans_pgd 2021-11-16 10:12:57 +00:00
pgtable-hwdef.h arm64/mm: use GENMASK_ULL for TTBR_BADDR_MASK_52 2022-07-19 19:29:04 +01:00
pgtable-prot.h arm64/mm: move protection_map[] inside the platform 2022-07-17 17:14:37 -07:00
pgtable-types.h
pgtable.h arm64/mm: fix incorrect file_map_count for invalid pmd 2023-01-18 11:58:18 +01:00
pointer_auth.h arm64: move preemption disablement to prctl handlers 2021-07-28 18:33:49 +01:00
preempt.h arm64: Support PREEMPT_DYNAMIC 2022-02-19 11:11:09 +01:00
probes.h
proc-fns.h
processor.h arm64: make is_ttbrX_addr() noinstr-safe 2022-12-31 13:32:56 +01:00
ptdump.h arm64: Add __init section marker to some functions 2021-04-08 17:45:10 +01:00
ptrace.h arm64: fix compat syscall return truncation 2021-08-03 10:35:03 +01:00
pvclock-abi.h
rwonce.h arm64: Do not include __READ_ONCE() block in assembly files 2022-03-09 21:56:50 +00:00
scs.h arm64: scs: Drop unused 'tmp' argument to scs_{load, save} asm macros 2021-05-27 17:55:33 +01:00
sdei.h arm64: stacktrace: move SDEI stack helpers to stacktrace code 2022-09-09 12:30:07 +01:00
seccomp.h
sections.h arm64: entry: Allow the trampoline text to occupy multiple pages 2022-02-15 17:40:28 +00:00
set_memory.h set_memory: allow querying whether set_direct_map_*() is actually enabled 2021-07-08 11:48:20 -07:00
setup.h arm64: fix rodata=full 2022-08-23 11:02:02 +01:00
shmparam.h
signal.h
signal32.h
simd.h arm64: replace in_irq() with in_hardirq() 2021-08-20 19:49:38 +01:00
smp.h arm64: smp: remove stack from secondary_data 2021-05-26 22:45:46 +01:00
smp_plat.h arm64: Add missing header <asm/smp.h> in two files 2021-07-12 13:37:34 +01:00
sparsemem.h arm64: Force SPARSEMEM_VMEMMAP as the only memory management model 2021-04-23 14:18:21 +01:00
spectre.h Merge branch 'for-next/spectre-bhb' into for-next/core 2022-03-14 19:08:31 +00:00
spinlock.h
spinlock_types.h locking: Allow to include asm/spinlock_types.h from linux/spinlock_types_raw.h 2021-12-07 15:14:12 +01:00
stack_pointer.h
stackprotector.h
stacktrace.h arm64: stacktrace: track all stack boundaries explicitly 2022-09-09 12:30:08 +01:00
stage2_pgtable.h KVM: arm64: Limit stage2_apply_range() batch size to largest block 2022-10-09 02:33:49 +01:00
stat.h
string.h Revert "arm64: Mitigate MTE issues with str{n}cmp()" 2022-03-07 21:57:02 +00:00
suspend.h
sync_bitops.h
syscall.h arch: remove unused function syscall_set_arguments() 2021-09-14 16:06:20 +02:00
syscall_wrapper.h arm64/syscall: Include asm/ptrace.h in syscall_wrapper header. 2022-11-09 09:52:25 +00:00
sysreg.h Char/Misc and other driver changes for 6.1-rc1 2022-10-08 08:56:37 -07:00
system_misc.h arm64: die(): pass 'err' as long 2022-09-16 12:17:03 +01:00
thread_info.h arm64/sme: Implement SVCR context switching 2022-04-22 18:50:58 +01:00
timex.h
tlb.h arm64: tlb: fix the TTL value of tlb_get_level 2021-06-23 14:52:57 +01:00
tlbflush.h arm64: mm: Fix TLBI vs ASID rollover 2021-08-06 13:52:03 +01:00
topology.h arm64, topology: enable use of init_cpu_capacity_cppc() 2022-03-10 20:21:58 +01:00
trans_pgd.h arm64: trans_pgd: remove trans_pgd_map_page() 2021-10-01 13:31:01 +01:00
traps.h arm64: Treat ESR_ELx as a 64-bit register 2022-04-29 19:26:27 +01:00
uaccess.h arm64: uaccess: simplify uaccess_mask_ptr() 2022-09-23 14:39:20 +01:00
unistd.h fs: stat: compat: Add __ARCH_WANT_COMPAT_STAT 2022-04-26 13:35:45 -07:00
unistd32.h mm/mempolicy: wire up syscall set_mempolicy_home_node 2022-01-15 16:30:30 +02:00
uprobes.h
vdso.h arm64: alternative: patch alternatives in the vDSO 2022-09-09 12:27:25 +01:00
vectors.h arm64: fix clang warning about TRAMP_VALIAS 2022-03-18 13:48:28 +00:00
vermagic.h
virt.h arm64: Save state of HCR_EL2.E2H before switch to EL1 2022-07-01 15:22:51 +01:00
vmalloc.h kasan, vmalloc, arm64: mark vmalloc mappings as pgprot_tagged 2022-03-24 19:06:47 -07:00
vmap_stack.h kasan, arm64: reset pointer tags of vmapped stacks 2022-03-24 19:06:47 -07:00
word-at-a-time.h arm64: extable: add load_unaligned_zeropad() handler 2021-10-21 10:45:22 +01:00
xor.h lib/xor: make xor prototypes more friendly to compiler vectorization 2022-02-11 20:39:39 +11:00