[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86/viridian: fix xen-hvmcrash when vp_assist page is present
commit 4567bf73c18cc4670f83de09d50911aae8cda64b Author: Paul Durrant <paul.durrant@xxxxxxxxxx> AuthorDate: Wed Mar 22 12:03:03 2017 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Wed Mar 22 12:03:03 2017 +0100 x86/viridian: fix xen-hvmcrash when vp_assist page is present Currently use of xen-hvmcrash will cause an immediate domain_crash() in initialize_vp_assist() because it is called from viridian_load_vcpu_ctxt() without having first cleared any previous mapping. This patch addes a check into viridian_load_vcpu_ctxt() to avoid re- initialization and turned the domain_crash() in initialize_vp_assist() into an ASSERT() since neither codepath into that function should allow it to be hit. Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> --- xen/arch/x86/hvm/viridian.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/xen/arch/x86/hvm/viridian.c b/xen/arch/x86/hvm/viridian.c index f2c9613..a71f928 100644 --- a/xen/arch/x86/hvm/viridian.c +++ b/xen/arch/x86/hvm/viridian.c @@ -283,6 +283,8 @@ static void initialize_vp_assist(struct vcpu *v) struct page_info *page = get_page_from_gfn(d, gmfn, NULL, P2M_ALLOC); void *va; + ASSERT(!v->arch.hvm_vcpu.viridian.vp_assist.va); + /* * See section 7.8.7 of the specification for details of this * enlightenment. @@ -306,14 +308,6 @@ static void initialize_vp_assist(struct vcpu *v) clear_page(va); - /* - * If we overwrite an existing address here then something has - * gone wrong and a domain page will leak. Instead crash the - * domain to make the problem obvious. - */ - if ( v->arch.hvm_vcpu.viridian.vp_assist.va ) - domain_crash(d); - v->arch.hvm_vcpu.viridian.vp_assist.va = va; return; @@ -904,7 +898,8 @@ static int viridian_load_vcpu_ctxt(struct domain *d, hvm_domain_context_t *h) return -EINVAL; v->arch.hvm_vcpu.viridian.vp_assist.msr.raw = ctxt.vp_assist_msr; - if ( v->arch.hvm_vcpu.viridian.vp_assist.msr.fields.enabled ) + if ( v->arch.hvm_vcpu.viridian.vp_assist.msr.fields.enabled && + !v->arch.hvm_vcpu.viridian.vp_assist.va ) initialize_vp_assist(v); v->arch.hvm_vcpu.viridian.vp_assist.vector = ctxt.vp_assist_vector; -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |