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

Alexander Graf
2010-06-27T10:35:22Z

Am 27.06.2010 um 12:03 schrieb Avi Kivity <avi-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>:

> 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

>