Re: [PATCH] KVM: x86/mmu: fix potential races when walking host page table

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 4/29/22 16:35, Sean Christopherson wrote:
On Fri, Apr 29, 2022, Paolo Bonzini wrote:
+out:
+	local_irq_restore(flags);
+	return level;
+}
+EXPORT_SYMBOL_GPL(kvm_lookup_address_level_in_mm);

Exporting is not needed.

Thanks for writing the walk code though.  I'll adapt it and integrate the
patch.

But why are we fixing this only in KVM?  I liked the idea of stealing perf's
implementation because it was a seemlingly perfect fit and wouldn't introduce
new code (ignoring wrappers, etc...).

We _know_ that at least one subsystem is misusing lookup_address_in_pgd() and
given that its wrappers are exported, I highly doubt KVM is the only offender.
It really feels like we're passing the buck here by burying the fix in KVM.

There are two ways to do it:

* having a generic function in mm/. The main issue there is the lack of a PG_LEVEL_{P4D,PUD,PMD,PTE} enum at the mm/ level. We could use (ctz(x) - 12) / 9 to go from size to level, but it's ugly and there could be architectures with heterogeneous page table sizes.

* having a generic function in arch/x86/. In this case KVM seems to be the odd one that doesn't need the PTE. For example vc_slow_virt_to_phys needs the PTE, and needs the size rather than the "level" per se.

So for now I punted, while keeping open the door for moving code from arch/x86/kvm/ to mm/ if anyone else (even other KVM ports) need the same logic.

Paolo




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux