Re: [PATCH 08/26] KVM: PPC: Add PV guest critical sections

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

 




Am 27.06.2010 um 12:03 schrieb Avi Kivity <avi@xxxxxxxxxx>:

On 06/26/2010 02:24 AM, Alexander Graf wrote:
When running in hooked code we need a way to disable interrupts without
clobbering any interrupts or exiting out to the hypervisor.

To achieve this, we have an additional critical field in the shared page. If that field is equal to the r1 register of the guest, it tells the hypervisor that we're in such a critical section and thus may not receive any interrupts.


--- a/arch/powerpc/kvm/book3s.c
+++ b/arch/powerpc/kvm/book3s.c
@@ -251,14 +251,25 @@ int kvmppc_book3s_irqprio_deliver(struct kvm_vcpu *vcpu, unsigned int priority)
     int deliver = 1;
     int vec = 0;
     ulong flags = 0ULL;
+    ulong crit_raw = vcpu->arch.shared->critical;
+    ulong crit_r1 = kvmppc_get_gpr(vcpu, 1);
+    bool crit;
+
+    /* Truncate crit indicators in 32 bit mode */
+    if (!(vcpu->arch.shared->msr&  MSR_SF)) {
+        crit_raw&= 0xffffffff;
+        crit_r1&= 0xffffffff;
+    }
+
+    crit = (crit_raw == crit_r1);


I think you need to qualify that for supervisor mode only. Otherwise guest userspace can guess the value of shared->critical and disable interrupts.


Yes, you're right. Good catch!

Alex


--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[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