]> www.infradead.org Git - users/hch/misc.git/commit
KVM: arm64: Use acquire/release to communicate FF-A version negotiation
authorWill Deacon <will@kernel.org>
Mon, 7 Apr 2025 15:27:55 +0000 (16:27 +0100)
committerOliver Upton <oliver.upton@linux.dev>
Mon, 7 Apr 2025 22:03:34 +0000 (15:03 -0700)
commita344e258acb0a7f0e7ed10a795c52d1baf705164
tree0bca97123700c546ea2ebbf066d2979b0f9b8a01
parentc8631ea59b6523035ffb607634eef7bacc8947fe
KVM: arm64: Use acquire/release to communicate FF-A version negotiation

The pKVM FF-A proxy rejects FF-A requests other than FFA_VERSION until
version negotiation is complete, which is signalled by setting the
global 'has_version_negotiated' variable.

To avoid excessive locking, this variable is checked directly from
kvm_host_ffa_handler() in response to an FF-A call, but this can race
against another CPU performing the negotiation and potentially lead to
reading a torn value (incredibly unlikely for a 'bool') or problematic
re-ordering of the accesses to 'has_version_negotiated' and
'hyp_ffa_version' whereby a stale version number could be read by
__do_ffa_mem_xfer().

Use acquire/release primitives when writing 'has_version_negotiated'
with the version lock held and when reading without the lock held.

Cc: Sebastian Ene <sebastianene@google.com>
Cc: Sudeep Holla <sudeep.holla@arm.com>
Cc: Quentin Perret <qperret@google.com>
Cc: Oliver Upton <oliver.upton@linux.dev>
Cc: Marc Zyngier <maz@kernel.org>
Fixes: c9c012625e12 ("KVM: arm64: Trap FFA_VERSION host call in pKVM")
Signed-off-by: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/r/20250407152755.1041-1-will@kernel.org
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
arch/arm64/kvm/hyp/nvhe/ffa.c