From: Adrian Pop Date: Wed, 15 Nov 2017 13:47:59 +0000 (+0200) Subject: x86/hvm: Fix altp2m_vcpu_enable_notify error handling X-Git-Tag: 4.10.0-rc6~2 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=eb0660c6950e08e44fdfeca3e29320382e2a1554;p=people%2Fdariof%2Fxen.git x86/hvm: Fix altp2m_vcpu_enable_notify error handling The altp2m_vcpu_enable_notify subop handler might skip calling rcu_unlock_domain() after rcu_lock_current_domain(). Albeit since both rcu functions are no-ops when run on the current domain, this doesn't really have repercussions. The second change is adding a missing break that would have potentially enabled #VE for the current domain even if it had intended to enable it for another one (not a supported functionality). Signed-off-by: Adrian Pop Reviewed-by: Andrew Cooper Reviewed-by: Jan Beulich Release-acked-by: Julien Grall --- diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index 205b4cb685..0af498a312 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -4534,12 +4534,18 @@ static int do_altp2m_op( if ( a.u.enable_notify.pad || a.domain != DOMID_SELF || a.u.enable_notify.vcpu_id != curr->vcpu_id ) + { rc = -EINVAL; + break; + } if ( !gfn_eq(vcpu_altp2m(curr).veinfo_gfn, INVALID_GFN) || mfn_eq(get_gfn_query_unlocked(curr->domain, a.u.enable_notify.gfn, &p2mt), INVALID_MFN) ) - return -EINVAL; + { + rc = -EINVAL; + break; + } vcpu_altp2m(curr).veinfo_gfn = _gfn(a.u.enable_notify.gfn); altp2m_vcpu_update_vmfunc_ve(curr);