mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-04 16:25:34 +00:00
![]() When the TTBR0 PAN feature is enabled, the kernel entry points need to disable access to TTBR0_EL1. The PAN status of the interrupted context is stored as part of the saved pstate, reusing the PSR_PAN_BIT (22). Restoring access to TTBR0_EL1 is done on exception return if returning to user or returning to a context where PAN was disabled. Context switching via switch_mm() must defer the update of TTBR0_EL1 until a return to user or an explicit uaccess_enable() call. Special care needs to be taken for two cases where TTBR0_EL1 is set outside the normal kernel context switch operation: EFI run-time services (via efi_set_pgd) and CPU suspend (via cpu_(un)install_idmap). Code has been added to avoid deferred TTBR0_EL1 switching as in switch_mm() and restore the reserved TTBR0_EL1 when uninstalling the special TTBR0_EL1. User cache maintenance (user_cache_maint_handler and __flush_cache_user_range) needs the TTBR0_EL1 re-instated since the operations are performed by user virtual address. This patch also removes a stale comment on the switch_mm() function. Cc: Will Deacon <will.deacon@arm.com> Cc: James Morse <james.morse@arm.com> Cc: Kees Cook <keescook@chromium.org> Cc: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> |
||
---|---|---|
.. | ||
probes | ||
vdso | ||
.gitignore | ||
acpi.c | ||
acpi_numa.c | ||
acpi_parking_protocol.c | ||
alternative.c | ||
arm64ksyms.c | ||
armv8_deprecated.c | ||
asm-offsets.c | ||
cacheinfo.c | ||
cpu-reset.h | ||
cpu-reset.S | ||
cpu_errata.c | ||
cpu_ops.c | ||
cpufeature.c | ||
cpuidle.c | ||
cpuinfo.c | ||
debug-monitors.c | ||
efi-entry.S | ||
efi.c | ||
entry-fpsimd.S | ||
entry-ftrace.S | ||
entry.S | ||
entry32.S | ||
fpsimd.c | ||
ftrace.c | ||
head.S | ||
hibernate-asm.S | ||
hibernate.c | ||
hw_breakpoint.c | ||
hyp-stub.S | ||
image.h | ||
insn.c | ||
io.c | ||
irq.c | ||
jump_label.c | ||
kaslr.c | ||
kgdb.c | ||
kuser32.S | ||
machine_kexec.c | ||
Makefile | ||
module-plts.c | ||
module.c | ||
module.lds | ||
paravirt.c | ||
pci.c | ||
perf_callchain.c | ||
perf_event.c | ||
perf_regs.c | ||
process.c | ||
psci.c | ||
ptrace.c | ||
relocate_kernel.S | ||
return_address.c | ||
setup.c | ||
signal.c | ||
signal32.c | ||
sleep.S | ||
smccc-call.S | ||
smp.c | ||
smp_spin_table.c | ||
stacktrace.c | ||
suspend.c | ||
sys.c | ||
sys32.c | ||
sys_compat.c | ||
time.c | ||
topology.c | ||
trace-events-emulation.h | ||
traps.c | ||
vdso.c | ||
vmlinux.lds.S |