linux/arch/arm64/kernel
Mark Brown 766121ba5d arm64/mte: Add userspace interface for enabling asymmetric mode
The architecture provides an asymmetric mode for MTE where tag mismatches
are checked asynchronously for stores but synchronously for loads. Allow
userspace processes to select this and make it available as a default mode
via the existing per-CPU sysfs interface.

Since there PR_MTE_TCF_ values are a bitmask (allowing the kernel to choose
between the multiple modes) and there are no free bits adjacent to the
existing PR_MTE_TCF_ bits the set of bits used to specify the mode becomes
disjoint. Programs using the new interface should be aware of this and
programs that do not use it will not see any change in behaviour.

When userspace requests two possible modes but the system default for the
CPU is the third mode (eg, default is synchronous but userspace requests
either asynchronous or asymmetric) the preference order is:

   ASYMM > ASYNC > SYNC

This situation is not currently possible since there are only two modes and
it is mandatory to have a system default so there could be no ambiguity and
there is no ABI change. The chosen order is basically arbitrary as we do not
have a clear metric for what is better here.

If userspace requests specifically asymmetric mode via the prctl() and the
system does not support it then we will return an error, this mirrors
how we handle the case where userspace enables MTE on a system that does
not support MTE at all and the behaviour that will be seen if running on
an older kernel that does not support userspace use of asymmetric mode.

Attempts to set asymmetric mode as the default mode will result in an error
if the system does not support it.

Signed-off-by: Mark Brown <broonie@kernel.org>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Reviewed-by: Vincenzo Frascino <Vincenzo.Frascino@arm.com>
Tested-by: Branislav Rankov <branislav.rankov@arm.com>
Link: https://lore.kernel.org/r/20220216173224.2342152-5-broonie@kernel.org
Signed-off-by: Will Deacon <will@kernel.org>
2022-02-25 14:41:05 +00:00
..
probes arm64: kprobes: Make a frame pointer on __kretprobe_trampoline 2021-10-22 12:16:53 -04:00
vdso arm64: vdso: Fix "no previous prototype" warning 2022-01-24 12:08:28 +00:00
vdso32 arm64: vdso: remove -nostdlib compiler flag 2021-11-08 10:02:57 +00:00
.gitignore
acpi_numa.c arm64, numa: Change the numa init functions name to be generic 2021-01-14 15:08:54 -08:00
acpi_parking_protocol.c arm64: use function_nocfi with __pa_symbol 2021-04-08 16:04:22 -07:00
acpi.c arm64: Simplify checking for populated DT 2021-12-06 16:12:53 +00:00
alternative.c arm64: Rename arm64-internal cache maintenance functions 2021-05-25 19:27:49 +01:00
armv8_deprecated.c arm64: extable: add a dedicated uaccess handler 2021-10-21 10:45:22 +01:00
asm-offsets.c KVM: arm64: Drop unused workaround_flags vcpu field 2021-12-08 14:54:07 +00:00
cacheinfo.c drivers: base: cacheinfo: Get rid of DEFINE_SMP_CALL_CACHE_FUNCTION() 2021-09-01 10:29:10 +02:00
cpu_errata.c KVM: arm64: Workaround Cortex-A510's single-step and PAC trap errata 2022-02-03 09:22:30 +00:00
cpu_ops.c
cpu-reset.S arm64: kexec: remove cpu-reset.h 2021-10-01 13:31:00 +01:00
cpufeature.c arm64/mte: Add hwcap for asymmetric mode 2022-02-25 14:41:05 +00:00
cpuidle.c arm64: kernel: Update the stale comment 2021-05-06 12:26:26 +01:00
cpuinfo.c arm64/mte: Add hwcap for asymmetric mode 2022-02-25 14:41:05 +00:00
crash_core.c
crash_dump.c arm64: kdump: update ppos when reading elfcorehdr 2021-03-22 12:46:38 +00:00
debug-monitors.c arm64: expose FAR_EL1 tag bits in siginfo 2020-11-23 18:17:39 +00:00
efi-entry.S arm64: Rename arm64-internal cache maintenance functions 2021-05-25 19:27:49 +01:00
efi-header.S arm64: head: tidy up the Image header definition 2020-11-17 16:14:20 +00:00
efi-rt-wrapper.S
efi.c arm64: efi: Export screen_info 2021-08-04 16:54:36 +00:00
entry-common.c arm64: mte: avoid clearing PSTATE.TCO on entry unless necessary 2022-02-22 21:48:44 +00:00
entry-fpsimd.S arm64/sve: Explicitly load vector length when restoring SVE state 2021-10-21 10:18:17 +01:00
entry-ftrace.S arm64: Use BTI C directly and unconditionally 2021-12-14 18:12:58 +00:00
entry.S arm64: mte: avoid clearing PSTATE.TCO on entry unless necessary 2022-02-22 21:48:44 +00:00
fpsimd.c RISCV: 2022-01-16 16:15:14 +02:00
ftrace.c arm64: ftrace: use HAVE_FUNCTION_GRAPH_RET_ADDR_PTR 2021-11-16 09:47:54 +00:00
head.S sched: move CPU field back into thread_info if THREAD_INFO_IN_TASK=y 2021-09-30 16:13:10 +02:00
hibernate-asm.S arm64: kexec: install a copy of the linear-map 2021-10-01 13:31:00 +01:00
hibernate.c arm64: Drop outdated links in comments 2022-01-05 11:51:01 +00:00
hw_breakpoint.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
hyp-stub.S Merge remote-tracking branch 'arm64/for-next/vhe-only' into kvmarm-master/next 2021-04-13 15:42:40 +01:00
idle.c Merge branch 'for-next/entry' into for-next/core 2021-06-24 14:01:55 +01:00
idreg-override.c arm64/cpufeature: Optionally disable MTE via command-line 2021-08-03 15:48:01 +01:00
image-vars.h KVM: arm64: Hide kvm_arm_pmu_available behind CONFIG_HW_PERF_EVENTS=y 2021-11-17 14:49:11 +01:00
image.h arm64: get rid of TEXT_OFFSET 2020-09-07 15:00:52 +01:00
io.c
irq.c arm64: irq: allow FIQs to be handled 2021-03-24 20:19:30 +00:00
jump_label.c arm64: insn: decouple patching from insn code 2021-06-11 11:19:27 +01:00
kaslr.c arm64: fix the doc of RANDOMIZE_MODULE_REGION_FULL 2021-08-03 10:36:42 +01:00
kexec_image.c arm64: kexec_file: Fix sparse warning 2020-11-10 13:11:44 +00:00
kgdb.c arm64: insn: decouple patching from insn code 2021-06-11 11:19:27 +01:00
kuser32.S
machine_kexec_file.c arm64: kexec: Fix missing error code 'ret' warning in load_other_segments() 2021-12-16 17:44:58 +00:00
machine_kexec.c Merge branches 'for-next/misc', 'for-next/cache-ops-dzp', 'for-next/stacktrace', 'for-next/xor-neon', 'for-next/kasan', 'for-next/armv8_7-fp', 'for-next/atomics', 'for-next/bti', 'for-next/sve', 'for-next/kselftest' and 'for-next/kcsan', remote-tracking branch 'arm64/for-next/perf' into for-next/core 2022-01-05 18:14:32 +00:00
Makefile kbuild: use more subdir- for visiting subdirectories while cleaning 2021-10-24 13:49:46 +09:00
module-plts.c arm64: improve whitespace 2021-02-04 13:59:49 +00:00
module.c mm: defer kmemleak object creation of module_alloc() 2022-01-15 16:30:25 +02:00
mte.c arm64/mte: Add userspace interface for enabling asymmetric mode 2022-02-25 14:41:05 +00:00
paravirt.c x86/paravirt: Switch time pvops functions to use static_call() 2021-03-11 16:17:52 +01:00
patching.c Merge branch 'for-next/insn' into for-next/core 2021-06-24 14:03:24 +01:00
pci.c arm64: PCI: Support root bridge preparation for Hyper-V 2021-08-23 10:59:26 +01:00
perf_callchain.c Peter Zijlstra says: 2022-01-12 16:26:58 -08:00
perf_event.c arm64: perf: Don't register user access sysctl handler multiple times 2022-01-04 14:57:14 +00:00
perf_regs.c perf/arch: Remove perf_sample_data::regs_user_copy 2020-11-09 18:12:34 +01:00
pointer_auth.c arm64: move preemption disablement to prctl handlers 2021-07-28 18:33:49 +01:00
process.c arm64/mte: Add userspace interface for enabling asymmetric mode 2022-02-25 14:41:05 +00:00
proton-pack.c Merge remote-tracking branch 'arm64/for-next/fixes' into for-next/core 2020-12-09 18:04:55 +00:00
psci.c arm64: use function_nocfi with __pa_symbol 2021-04-08 16:04:22 -07:00
ptrace.c - Add a set of thread_info.flags accessors which snapshot it before 2022-01-10 11:34:10 -08:00
reloc_test_core.c
reloc_test_syms.S
relocate_kernel.S arm64: kexec: keep MMU enabled during kexec relocation 2021-10-01 13:31:00 +01:00
return_address.c arm64: Make return_address() use arch_stack_walk() 2021-12-10 14:06:04 +00:00
sdei.c arm64: kernel: add helper for booted at EL2 and not VHE 2021-10-01 13:30:59 +01:00
setup.c arm64: Use correct method to calculate nomap region boundaries 2022-01-05 14:46:06 +00:00
signal32.c arm64 updates for 5.15: 2021-09-01 15:04:29 -07:00
signal.c arm64: Snapshot thread flags 2021-12-01 00:06:44 +01:00
sigreturn32.S
sleep.S kasan: remove redundant config option 2021-04-16 16:10:36 -07:00
smccc-call.S arm64: smccc: Save lr before calling __arm_smccc_sve_check() 2021-07-21 11:23:25 +01:00
smp_spin_table.c arm64: Rename arm64-internal cache maintenance functions 2021-05-25 19:27:49 +01:00
smp.c Devicetree updates for v5.16: 2021-11-02 22:22:13 -07:00
stacktrace.c arm64: Mark start_backtrace() notrace and NOKPROBE_SYMBOL 2022-01-24 14:25:20 +00:00
suspend.c arm64: kasan: mte: use a constant kernel GCR_EL1 value 2021-08-02 18:14:21 +01:00
sys32.c
sys_compat.c arm64: Rename arm64-internal cache maintenance functions 2021-05-25 19:27:49 +01:00
sys.c
syscall.c arm64: Snapshot thread flags 2021-12-01 00:06:44 +01:00
time.c arm64: Make profile_pc() use arch_stack_walk() 2021-12-10 14:06:04 +00:00
topology.c topology: Represent clusters of CPUs within a die 2021-10-15 11:25:15 +02:00
trace-events-emulation.h
traps.c Merge branch 'signal-for-v5.17' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace 2022-01-17 05:49:30 +02:00
vdso32-wrap.S arm64: do not descend to vdso directories twice 2021-01-20 12:18:46 +00:00
vdso-wrap.S arm64: do not descend to vdso directories twice 2021-01-20 12:18:46 +00:00
vdso.c Merge branches 'for-next/misc', 'for-next/kselftest', 'for-next/xntable', 'for-next/vdso', 'for-next/fiq', 'for-next/epan', 'for-next/kasan-vmalloc', 'for-next/fgt-boot-init', 'for-next/vhe-only' and 'for-next/neon-softirqs-disabled', remote-tracking branch 'arm64/for-next/perf' into for-next/core 2021-04-15 14:00:38 +01:00
vmlinux.lds.S Merge branch 'for-next/kexec' into for-next/core 2021-10-29 12:24:47 +01:00