linux/arch/arm64/kernel
Fuad Tabba 5445d64199 arm64: Don't read GMID_EL1 when MTE is disabled
__cpuinfo_store_cpu() gates the GMID_EL1 read on the raw
ID_AA64PFR1_EL1, so it reads the register even when the kernel has
disabled MTE (CONFIG_ARM64_MTE=n or arm64.nomte). KVM sets HCR_EL2.TID5
in that case, and pKVM injects an UNDEF the host cannot handle:

  Internal error: Oops - Undefined instruction: 0000000002000000 [#1]  SMP
  pc : __cpuinfo_store_cpu+0xf4/0x264
  Kernel panic - not syncing: Attempted to kill the idle task!

Only pKVM reaches it, and only after a CPU is offlined and brought back
online: its CPU_ON relay sets the host HCR before the CPU enters EL1,
while plain nVHE sets it at CPUHP_AP_KVM_ONLINE.

Gate the read on the CPU's own ID_AA64PFR1_EL1 with the command-line
override applied, and on CONFIG_ARM64_MTE, which no register reflects.
The boot CPU stores its registers before init_cpu_features() strips an
unsafe override, so clamp against the hardware value here too.

Fixes: f35abcbb8a ("KVM: arm64: Trap MTE access and discovery when MTE is disabled")
Cc: stable@vger.kernel.org
Signed-off-by: Fuad Tabba <fuad.tabba@linux.dev>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Will Deacon <will@kernel.org>
2026-09-03 13:03:23 +00:00
..
pi Arm: 2026-08-25 11:48:04 -07:00
probes arm64: kprobes: Allow reentering kprobes while single-stepping 2026-07-17 19:03:08 +01:00
vdso stackleak: Split KSTACK_ERASE_CFLAGS from GCC_PLUGINS_CFLAGS 2025-07-21 21:40:57 -07:00
vdso32 arm64: vdso32: Respect COMPAT_32BIT_TIME 2026-07-07 23:52:53 +02:00
.gitignore
acpi_numa.c arm64: ACPI: NUMA: initialize all values of acpi_early_node_map to NUMA_NO_NODE 2024-08-14 17:51:39 +01:00
acpi_parking_protocol.c
acpi.c cpu/hotplug: Fix NULL kobject warning in cpuhp_smt_enable() 2026-06-29 11:47:36 +01:00
alternative.c arm64: Reject modules with internal alternative callbacks 2025-11-07 15:00:14 +00:00
armv8_deprecated.c arm64: armv8_deprecated: Disable swp emulation when FEAT_LSUI present 2026-03-27 17:29:10 +00:00
asm-offsets.c KVM: arm64: Avoid mismatched accesses to 'struct kvm_nvhe_init_params' 2026-08-19 12:22:24 -07:00
cacheinfo.c arm64: cacheinfo: Avoid out-of-bounds write to cacheinfo array 2025-02-07 09:57:56 +00:00
compat_alignment.c arm64: compat: Fix decrementing LDM/STM alignment emulation 2026-08-27 14:16:04 +00:00
cpu_errata.c arm64: errata: pass REVIDR when matching target implementation CPUs 2026-09-03 13:02:01 +00:00
cpu_ops.c
cpu-reset.S
cpufeature.c arm64: Don't read GMID_EL1 when MTE is disabled 2026-09-03 13:03:23 +00:00
cpuinfo.c arm64: Don't read GMID_EL1 when MTE is disabled 2026-09-03 13:03:23 +00:00
crash_dump.c
debug-monitors.c arm64: debug: don't mask DAIF for mdscr_write() 2026-08-06 13:07:45 +00:00
efi-header.S include: pe.h: Fix PE definitions 2025-05-21 16:46:37 +02:00
efi-rt-wrapper.S
efi.c arm64/efi: Avoid voluntary preemption with efi_mm installed 2026-08-12 10:21:20 +00:00
elfcore.c fs: avoid mmap sem relocks when coredumping with many missing pages 2025-02-21 10:25:32 +01:00
entry-common.c arm64: entry: Avoid unnecessary local_irq_disable() on kernel exit 2026-08-11 11:35:08 +00:00
entry-ftrace.S arm64: Fix double word in comments 2025-11-12 17:07:59 +00:00
entry.S arm64: entry: mask DAIF before returning from C EL1 handlers 2026-08-06 13:07:46 +00:00
fpsimd.c arm64: Avoid eager DVMSync reclaim batches with C1-Pro SME erratum 2026-06-29 12:00:37 +01:00
ftrace.c arm64: ftrace: prepare ftrace_modify_call() for use without CALL_OPS 2026-07-22 20:50:51 +00:00
head.S KVM: arm64: Trap MTE access and discovery when MTE is disabled 2026-01-23 11:28:48 +00:00
hibernate-asm.S
hibernate.c arm64: hibernate: Restore DAIF state on error 2026-08-06 13:07:45 +00:00
hw_breakpoint.c arm64/hw_breakpoint: reject unaligned watchpoints that would truncate BAS 2026-06-19 17:04:57 +01:00
hyp-stub.S KVM: arm64: Don't populate TPIDR_EL2 in finalise_el2() 2026-05-27 15:30:39 +01:00
idle.c arch: arm64: add early_param idle=<wfi|yield|nop> 2026-08-06 13:10:03 +00:00
image-vars.h Merge branch 'kvm-arm64/vtr-patch' into next 2026-08-19 14:05:49 -07:00
image.h
io.c arm64: Use new fallback IO memcpy/memset 2024-10-28 21:44:29 +00:00
irq.c arm64: panic from init_IRQ if IRQ handler stacks cannot be allocated 2026-05-19 12:27:10 +01:00
jump_label.c asm-generic: introduce text-patching.h 2024-11-07 14:25:15 -08:00
kaslr.c arm64/mm: Remove randomization of the linear map 2025-04-29 13:21:49 +01:00
kexec_image.c arm64: kernel: initialize missing kexec_buf->random field 2026-01-05 21:27:43 +00:00
kgdb.c arm64: debug: call step handlers statically 2025-07-08 13:27:41 +01:00
kuser32.S
machine_kexec_file.c arm64: kexec_file: Add support for crashkernel CMA reservation 2026-06-30 18:49:06 +03:00
machine_kexec.c arm64: trans_pgd: clone only the linear map that exists at runtime 2026-09-03 13:01:15 +00:00
Makefile arm64: fpsimd: Move SME save/restore inline 2026-06-03 16:50:49 +01:00
Makefile.syscalls syscalls: fix syscall macros for newfstat/newfstatat 2024-08-02 15:20:47 +02:00
module-plts.c arm64: ftrace: fix unreachable PLT for ftrace_caller in init_module with CONFIG_DYNAMIC_FTRACE 2025-09-05 16:56:20 +01:00
module.c arm64: Reject modules with internal alternative callbacks 2025-11-07 15:00:14 +00:00
mpam.c arm64: mpam: Initialise and context switch the MPAMSM_EL1 register 2026-03-27 15:29:02 +00:00
mte.c exec_state: relocate dumpable information 2026-05-26 11:02:01 +02:00
paravirt.c arm64/paravirt: Use common code for paravirt_steal_clock() 2026-01-12 16:30:00 +01:00
patching.c arm64: patching: replace min_t with min in __text_poke 2026-06-03 21:15:24 +01:00
pci.c arm64: PCI: Migrate ACPI related functions to pci-acpi.c 2024-08-27 15:48:34 +02:00
perf_callchain.c perf/core: Correct perf sampling with guest VMs 2024-11-14 10:40:01 +01:00
perf_regs.c
pointer_auth.c
process.c arm64: Avoid eager DVMSync reclaim batches with C1-Pro SME erratum 2026-06-29 12:00:37 +01:00
proton-pack.c arm64: proton-pack: Restore the nospectre_bhb command-line option 2026-07-28 10:29:25 +00:00
psci.c arm64: psci: Ignore DENIED CPUs 2024-06-28 18:38:31 +01:00
ptrace.c Generic entry code updates: 2026-08-18 15:00:56 -07:00
reloc_test_core.c ARM64: reloc_test: add missing MODULE_DESCRIPTION() macro 2024-06-13 10:23:54 +01:00
reloc_test_syms.S
relocate_kernel.S arm64: Provide dcache_by_myline_op_nosync helper 2026-03-13 23:46:32 +01:00
return_address.c
rsi.c arm64/coco: Add pKVM as a CC platform 2026-07-21 22:27:47 +00:00
sdei.c Merge branches 'for-next/misc', 'for-next/kselftest', 'for-next/efi-preempt', 'for-next/assembler-macro', 'for-next/typos', 'for-next/sme-ptrace-disable', 'for-next/local-tlbi-page-reused', 'for-next/mpam', 'for-next/acpi' and 'for-next/documentation', remote-tracking branch 'arm64/for-next/perf' into for-next/core 2025-11-28 15:47:12 +00:00
setup.c arm64: remove early_ioremap_reset() call and __late_* macros 2026-08-06 18:57:22 -07:00
signal.c arm64: signal: Preserve POR_EL0 if poe_context is missing 2026-05-01 17:44:25 +01:00
signal32.c arm64/fpsimd: signal32: Always save+flush state early 2025-04-09 18:06:31 +01:00
sigreturn32.S arm64: rework compat syscall macros 2024-07-10 14:23:38 +02:00
sleep.S arm64: mm: Handle LVA support as a CPU feature 2024-02-16 12:42:36 +00:00
smccc-call.S arm64: smccc: Remove broken support for SMCCCv1.3 SVE discard hint 2024-11-07 11:18:52 +00:00
smp_spin_table.c
smp.c Merge branch 'for-next/sdei' into for-next/core 2026-08-14 10:16:12 +00:00
stacktrace.c Merge branches 'for-next/livepatch', 'for-next/user-contig-bbml2', 'for-next/misc', 'for-next/acpi', 'for-next/debug-entry', 'for-next/feat_mte_tagged_far', 'for-next/kselftest', 'for-next/mdscr-cleanup' and 'for-next/vmap-stack', remote-tracking branch 'arm64/for-next/perf' into for-next/core 2025-07-24 16:01:22 +01:00
static_call.c arm64: static_call: include asm/insns.h 2026-06-19 15:27:33 +01:00
suspend.c arm64: suspend: rely on daif helpers to handle PMR 2026-08-06 13:07:45 +00:00
sys_compat.c Merge branch 'for-next/c1-pro-erratum-4193714' into for-next/core 2026-04-20 13:12:35 +01:00
sys.c arm64: generate 64-bit syscall.tbl 2024-07-10 14:23:38 +02:00
sys32.c fs: fix archiecture-specific compat_ftruncate64 2026-03-23 12:41:57 +01:00
syscall.c randomize_kstack: Unify random source across arches 2026-03-24 21:12:03 -07:00
time.c
topology.c arm64: topology: read CPPC FFH feedback counters in one operation 2026-07-22 20:01:23 +00:00
trace-events-emulation.h tracing/treewide: Remove second parameter of __assign_str() 2024-05-22 20:14:47 -04:00
traps.c arm64: Fix typos and spelling errors in comments 2025-11-12 17:06:21 +00:00
vdso-wrap.S
vdso.c Convert more 'alloc_obj' cases to default GFP_KERNEL arguments 2026-02-21 20:03:00 -08:00
vdso32-wrap.S
vmcore_info.c arm64/sysreg: Replace TCR_EL1 field macros 2025-11-13 15:58:30 +00:00
vmlinux.lds.S arm64 updates for 7.2 2026-06-16 05:18:04 +05:30
watchdog_hld.c arm64/watchdog_hld: Add a cpufreq notifier for update watchdog thresh 2025-07-04 13:17:30 +01:00