All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] KVM: arm64: Fix masks in stage2_pte_cacheable()
@ 2020-10-29 14:47 Will Deacon
  2020-10-29 21:09   ` Marc Zyngier
  0 siblings, 1 reply; 3+ messages in thread
From: Will Deacon @ 2020-10-29 14:47 UTC (permalink / raw)
  To: kvmarm; +Cc: Will Deacon, kernel-team, Marc Zyngier

stage2_pte_cacheable() tries to figure out whether the mapping installed
in its 'pte' parameter is cacheable or not. Unfortunately, it fails
miserably because it extracts the memory attributes from the entry using
FIELD_GET(), which returns the attributes shifted down to bit 0, but then
compares this with the unshifted value generated by the PAGE_S2_MEMATTR()
macro.

A direct consequence of this bug is that cache maintenance is silently
skipped, which in turn causes 32-bit guests to crash early on when their
set/way maintenance is trapped but not emulated correctly.

Fix the broken masks by avoiding the use of FIELD_GET() altogether.

Cc: Quentin Perret <qperret@google.com>
Reported-by: Marc Zyngier <maz@kernel.org>
Fixes: 6d9d2115c480 ("KVM: arm64: Add support for stage-2 map()/unmap() in generic page-table")
Signed-off-by: Will Deacon <will@kernel.org>
---

Applies on top of the other pgtable fix I previously sent here:
https://lore.kernel.org/r/20201026144423.24683-1-will@kernel.org

 arch/arm64/kvm/hyp/pgtable.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm64/kvm/hyp/pgtable.c b/arch/arm64/kvm/hyp/pgtable.c
index 95141b0d6088..0271b4a3b9fe 100644
--- a/arch/arm64/kvm/hyp/pgtable.c
+++ b/arch/arm64/kvm/hyp/pgtable.c
@@ -635,7 +635,7 @@ static void stage2_flush_dcache(void *addr, u64 size)
 
 static bool stage2_pte_cacheable(kvm_pte_t pte)
 {
-	u64 memattr = FIELD_GET(KVM_PTE_LEAF_ATTR_LO_S2_MEMATTR, pte);
+	u64 memattr = pte & KVM_PTE_LEAF_ATTR_LO_S2_MEMATTR;
 	return memattr == PAGE_S2_MEMATTR(NORMAL);
 }
 
-- 
2.29.1.341.ge80a0c044ae-goog

_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] KVM: arm64: Fix masks in stage2_pte_cacheable()
  2020-10-29 14:47 [PATCH] KVM: arm64: Fix masks in stage2_pte_cacheable() Will Deacon
@ 2020-10-29 21:09   ` Marc Zyngier
  0 siblings, 0 replies; 3+ messages in thread
From: Marc Zyngier @ 2020-10-29 21:09 UTC (permalink / raw)
  To: kvmarm, Gavin Shan, Will Deacon; +Cc: shan.gavin, linux-kernel, kernel-team

On Thu, 29 Oct 2020 14:47:16 +0000, Will Deacon wrote:
> stage2_pte_cacheable() tries to figure out whether the mapping installed
> in its 'pte' parameter is cacheable or not. Unfortunately, it fails
> miserably because it extracts the memory attributes from the entry using
> FIELD_GET(), which returns the attributes shifted down to bit 0, but then
> compares this with the unshifted value generated by the PAGE_S2_MEMATTR()
> macro.
> 
> [...]

Applied to next, thanks!

[1/1] KVM: arm64: Fix masks in stage2_pte_cacheable()
      commit: e2fc6a9f686d037cbd9b08b9fb657685b4a722d3

Cheers,

	M.
-- 
Without deviation from the norm, progress is not possible.



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] KVM: arm64: Fix masks in stage2_pte_cacheable()
@ 2020-10-29 21:09   ` Marc Zyngier
  0 siblings, 0 replies; 3+ messages in thread
From: Marc Zyngier @ 2020-10-29 21:09 UTC (permalink / raw)
  To: kvmarm, Gavin Shan, Will Deacon; +Cc: kernel-team, linux-kernel, shan.gavin

On Thu, 29 Oct 2020 14:47:16 +0000, Will Deacon wrote:
> stage2_pte_cacheable() tries to figure out whether the mapping installed
> in its 'pte' parameter is cacheable or not. Unfortunately, it fails
> miserably because it extracts the memory attributes from the entry using
> FIELD_GET(), which returns the attributes shifted down to bit 0, but then
> compares this with the unshifted value generated by the PAGE_S2_MEMATTR()
> macro.
> 
> [...]

Applied to next, thanks!

[1/1] KVM: arm64: Fix masks in stage2_pte_cacheable()
      commit: e2fc6a9f686d037cbd9b08b9fb657685b4a722d3

Cheers,

	M.
-- 
Without deviation from the norm, progress is not possible.


_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-10-29 21:09 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-29 14:47 [PATCH] KVM: arm64: Fix masks in stage2_pte_cacheable() Will Deacon
2020-10-29 21:09 ` Marc Zyngier
2020-10-29 21:09   ` Marc Zyngier

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.