From: Huaitong Han Date: Thu, 4 Feb 2016 10:40:08 +0000 (+0100) Subject: x86/hvm: disable pkeys for guests in non-paging mode X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=c41e0266dd59ab50b7a153157e9bd2a3ad114b53;p=people%2Fliuw%2Flibxenctrl-split%2Fxen.git x86/hvm: disable pkeys for guests in non-paging mode This patch disables pkeys for guest in non-paging mode, However XEN always uses paging mode to emulate guest non-paging mode, To emulate this behavior, pkeys needs to be manually disabled when guest switches to non-paging mode. Signed-off-by: Huaitong Han Reviewed-by: Andrew Cooper Acked-by: Kevin Tian --- diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index 195def661e..b9f340c35f 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -1379,12 +1379,13 @@ static void vmx_update_guest_cr(struct vcpu *v, unsigned int cr) if ( !hvm_paging_enabled(v) ) { /* - * SMEP/SMAP is disabled if CPU is in non-paging mode in hardware. - * However Xen always uses paging mode to emulate guest non-paging - * mode. To emulate this behavior, SMEP/SMAP needs to be manually - * disabled when guest VCPU is in non-paging mode. + * SMEP/SMAP/PKU is disabled if CPU is in non-paging mode in + * hardware. However Xen always uses paging mode to emulate guest + * non-paging mode. To emulate this behavior, SMEP/SMAP/PKU needs + * to be manually disabled when guest VCPU is in non-paging mode. */ - v->arch.hvm_vcpu.hw_cr[4] &= ~(X86_CR4_SMEP | X86_CR4_SMAP); + v->arch.hvm_vcpu.hw_cr[4] &= + ~(X86_CR4_SMEP | X86_CR4_SMAP | X86_CR4_PKE); } __vmwrite(GUEST_CR4, v->arch.hvm_vcpu.hw_cr[4]); break;