Thread (78 messages) flat view 78 messages, 6 authors, 2010-06-29

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

From: Alexander Graf <hidden>
Date: 2010-06-27 10:34:58
Also in: kvm

Am 27.06.2010 um 12:03 schrieb Avi Kivity [off-list ref]:
On 06/26/2010 02:24 AM, Alexander Graf wrote:
quoted
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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help