KVM Archive mirror
 help / color / mirror / Atom feed
From: Oliver Upton <oliver.upton@linux.dev>
To: kvmarm@lists.linux.dev
Cc: Marc Zyngier <maz@kernel.org>, James Morse <james.morse@arm.com>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	Zenghui Yu <yuzenghui@huawei.com>,
	kvm@vger.kernel.org, Oliver Upton <oliver.upton@linux.dev>
Subject: [PATCH 0/7] KVM: arm64: Don't clobber CLIDR and MPIDR across vCPU reset
Date: Thu,  2 May 2024 23:35:22 +0000	[thread overview]
Message-ID: <20240502233529.1958459-1-oliver.upton@linux.dev> (raw)

When I was reviewing Sebastian's CTR_EL0 series it occurred to me that
our handling of feature ID registers local to a vCPU is quite poor.

For VM-wide feature ID registers we ensure they get initialized once for
the lifetime of a VM. On the other hand, vCPU-local feature ID registers
get re-initialized on every vCPU reset, potentially clobbering the
values userspace set up.

MPIDR_EL1 and CLIDR_EL1 are the only registers in this space that we
allow userspace to modify for now. Clobbering the value of MPIDR_EL1 has
some disastrous side effects as the compressed index used by the
MPIDR-to-vCPU lookup table assumes MPIDR_EL1 is immutable after KVM_RUN.

Series + reproducer test case to address the problem of KVM wiping out
userspace changes to these registers. Note that there are still some
differences between VM and vCPU scoped feature ID registers from the
perspective of userspace. We do not allow the value of VM-scope
registers to change after KVM_RUN, but vCPU registers remain mutable.

Fixing this is no problem, but given the recent theme of UAPI breakage
in this area I focused only on the internal issue fo now.

Applies to 6.9-rc3

Oliver Upton (7):
  KVM: arm64: Rename is_id_reg() to imply VM scope
  KVM: arm64: Reset VM feature ID regs from kvm_reset_sys_regs()
  KVM: arm64: Only reset vCPU-scoped feature ID regs once
  KVM: selftests: Rename helper in set_id_regs to imply VM scope
  KVM: selftests: Store expected register value in set_id_regs
  KVM: arm64: Test that feature ID regs survive a reset
  KVM: selftests: Test vCPU-scoped feature ID registers

 arch/arm64/include/asm/kvm_host.h             |   2 +
 arch/arm64/kvm/arm.c                          |   5 -
 arch/arm64/kvm/sys_regs.c                     |  62 +++++----
 .../selftests/kvm/aarch64/set_id_regs.c       | 123 +++++++++++++++---
 4 files changed, 142 insertions(+), 50 deletions(-)


base-commit: fec50db7033ea478773b159e0e2efb135270e3b7
-- 
2.45.0.rc1.225.g2a3ae87e7f-goog


             reply	other threads:[~2024-05-02 23:35 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-02 23:35 Oliver Upton [this message]
2024-05-02 23:35 ` [PATCH 1/7] KVM: arm64: Rename is_id_reg() to imply VM scope Oliver Upton
2024-05-13 13:24   ` Sebastian Ott
2024-05-02 23:35 ` [PATCH 2/7] KVM: arm64: Reset VM feature ID regs from kvm_reset_sys_regs() Oliver Upton
2024-05-13 13:26   ` Sebastian Ott
2024-05-02 23:35 ` [PATCH 3/7] KVM: arm64: Only reset vCPU-scoped feature ID regs once Oliver Upton
2024-05-13 13:31   ` Sebastian Ott
2024-05-02 23:35 ` [PATCH 4/7] KVM: selftests: Rename helper in set_id_regs to imply VM scope Oliver Upton
2024-05-02 23:35 ` [PATCH 5/7] KVM: selftests: Store expected register value in set_id_regs Oliver Upton
2024-05-02 23:35 ` [PATCH 6/7] KVM: arm64: Test that feature ID regs survive a reset Oliver Upton
2024-05-02 23:35 ` [PATCH 7/7] KVM: selftests: Test vCPU-scoped feature ID registers Oliver Upton
2024-05-09 17:45 ` [PATCH 0/7] KVM: arm64: Don't clobber CLIDR and MPIDR across vCPU reset Marc Zyngier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240502233529.1958459-1-oliver.upton@linux.dev \
    --to=oliver.upton@linux.dev \
    --cc=james.morse@arm.com \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.linux.dev \
    --cc=maz@kernel.org \
    --cc=suzuki.poulose@arm.com \
    --cc=yuzenghui@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).