[PATCH v2 0/5] KVM: arm64: Enforce MTE disablement at EL2

Fuad Tabba tabba at google.com
Tue Jan 20 01:05:18 PST 2026


Hi,

I was wondering if there's anything else you would like me to do for
this series. Should I rebase it on 6.19-rc6?

Cheers,
/fuad

On Thu, 11 Dec 2025 at 11:38, Fuad Tabba <tabba at google.com> wrote:
>
> pKVM never exposes MTE to protected guests (pVM), but we must also
> ensure a malicious host cannot use MTE to attack the hypervisor or a
> pVM.
>
> If MTE is supported by the hardware (and is enabled at EL3), it remains
> available to lower exception levels by default. Disabling it in the host
> kernel (e.g., via 'arm64.nomte') only stops the kernel from advertising
> the feature; it does not physically disable MTE in the hardware.
>
> The ability to disable MTE in the host kernel is used by some systems,
> such as Android, so that the physical memory otherwise used as tag
> storage can be used for other things (i.e. treated just like the rest of
> memory).
>
> In this scenario, a malicious host could still access tags in pages
> donated to a guest using MTE instructions (e.g., STG and LDG), bypassing
> the kernel's configuration.
>
> To prevent this, explicitly disable MTE at EL2 (by clearing HCR_EL2.ATA)
> when the host has MTE disabled. This causes any MTE instruction usage to
> generate a Data Abort (trap) to the hypervisor.
>
> Additionally, to faithfully mimic hardware that does not support MTE,
> trap accesses to MTE system registers (e.g., GCR_EL1) and inject an
> Undefined Instruction exception back to the host.
>
> This logic is applied in all non-VHE modes. For non-protected modes,
> this remains beneficial as it prevents unpredictable behavior caused by
> accessing allocation tags when the system considers them disabled.
>
> Note that this ties into my other outgoing patch series [1], which also
> has some MTE-related fixes, but is not dependent on it.
>
> Based on Linux 6.18
>
> Cheers,
> /fuad
>
> [1] https://lore.kernel.org/all/20251211104710.151771-1-tabba@google.com/
> [2] https://lore.kernel.org/all/20251127122210.4111702-1-tabba@google.com/
>
> Fuad Tabba (4):
>   arm64: Remove dead code resetting HCR_EL2 for pKVM
>   arm64: Clear HCR_EL2.ATA when MTE is not supported or disabled
>   arm64: Inject UNDEF when accessing MTE sysregs with MTE disabled
>   KVM: arm64: Use kvm_has_mte() in pKVM trap initialization
>
> Quentin Perret (1):
>   KVM: arm64: Refactor enter_exception64()
>
>  arch/arm64/include/asm/kvm_arm.h     |   2 +-
>  arch/arm64/include/asm/kvm_emulate.h |   5 ++
>  arch/arm64/kernel/head.S             |   2 +-
>  arch/arm64/kvm/arm.c                 |   4 ++
>  arch/arm64/kvm/hyp/exception.c       | 100 ++++++++++++++++-----------
>  arch/arm64/kvm/hyp/nvhe/hyp-init.S   |   5 --
>  arch/arm64/kvm/hyp/nvhe/hyp-main.c   |  44 ++++++++++++
>  arch/arm64/kvm/hyp/nvhe/pkvm.c       |   2 +-
>  8 files changed, 114 insertions(+), 50 deletions(-)
>
>
> base-commit: 7d0a66e4bb9081d75c82ec4957c50034cb0ea449
> --
> 2.52.0.223.gf5cc29aaa4-goog
>



More information about the linux-arm-kernel mailing list