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

Re: [Xen-devel] [V2 PATCH 1/9] x86/hvm: pkeys, add pkeys support for cpuid handling



>>> On 01.12.15 at 21:03, <andrew.cooper3@xxxxxxxxxx> wrote:
> On 27/11/15 09:51, Huaitong Han wrote:
>> --- a/xen/arch/x86/hvm/hvm.c
>> +++ b/xen/arch/x86/hvm/hvm.c
>> @@ -4582,6 +4582,18 @@ void hvm_cpuid(unsigned int input, unsigned int *eax, 
>> unsigned int *ebx,
>>          /* Don't expose INVPCID to non-hap hvm. */
>>          if ( (count == 0) && !hap_enabled(d) )
>>              *ebx &= ~cpufeat_mask(X86_FEATURE_INVPCID);
>> +
>> +        /* X86_FEATURE_PKU is not yet implemented for shadow paging
>> +         *
>> +         * Hypervisor gets guest pkru value from XSAVE state, because
>> +         * Hypervisor CR4 without X86_CR4_PKE disables RDPKRU instruction.
>> +         */
>> +        if ( (count == 0) && (!hap_enabled(d) || !cpu_has_xsave) )
>> +            *ecx &= ~cpufeat_mask(X86_FEATURE_PKU);
>> +
>> +        if ( (count == 0) && cpu_has_pku )
>> +            *ecx |= (v->arch.hvm_vcpu.guest_cr[4] & X86_CR4_PKE) ?
>> +                     cpufeat_mask(X86_FEATURE_OSPKE) : 0;
> 
> This is still buggy.  cpu_has_pku has no relevance to whether OSPKE
> becomes visible.
> 
> Visibility of OSPKE is determined solely by v->arch.hvm_vcpu.guest_cr[4]
> & X86_CR4_PKE and nothing else.

Actually I wouldn't mind guarding against the case where the CR4 flag
is wrongly set for whatever reason, but that ought to check the PKU
bit in *ecx, not the host flag. Same applies to the cpu_has_xsave
check - this too should check the guest flag, not the host one.

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.