|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen stable-4.3] x86/domctl: don't ignore errors from vmce_restore_vcpu()
commit 2428aa8cdeb9293f00c71cfc2330e2f46ee9248d
Author: Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Thu Feb 13 10:01:11 2014 +0100
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Thu Feb 13 10:01:11 2014 +0100
x86/domctl: don't ignore errors from vmce_restore_vcpu()
What started out as a simple cleanup patch (eliminating the redundant
check of domctl->cmd before setting "copyback", which as a result
turned the "ext_vcpucontext_out" label useless) revealed a bug in the
handling of XEN_DOMCTL_set_ext_vcpucontext.
Fix this, retaining the cleanup, and at once dropping a stale comment
and an accompanying formatting issue.
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
master commit: af172d655c3900822d1f710ac13ee38ee9d482d2
master date: 2014-02-04 09:22:12 +0100
---
xen/arch/x86/domctl.c | 29 +++++++++++++----------------
1 files changed, 13 insertions(+), 16 deletions(-)
diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c
index 9a92a69..89df657 100644
--- a/xen/arch/x86/domctl.c
+++ b/xen/arch/x86/domctl.c
@@ -815,7 +815,7 @@ long arch_do_domctl(
ret = -ESRCH;
if ( (evc->vcpu >= d->max_vcpus) ||
((v = d->vcpu[evc->vcpu]) == NULL) )
- goto ext_vcpucontext_out;
+ break;
if ( domctl->cmd == XEN_DOMCTL_get_ext_vcpucontext )
{
@@ -847,17 +847,20 @@ long arch_do_domctl(
evc->vmce.caps = v->arch.vmce.mcg_cap;
evc->vmce.mci_ctl2_bank0 = v->arch.vmce.bank[0].mci_ctl2;
evc->vmce.mci_ctl2_bank1 = v->arch.vmce.bank[1].mci_ctl2;
+
+ ret = 0;
+ copyback = 1;
}
else
{
ret = -EINVAL;
if ( evc->size < offsetof(typeof(*evc), vmce) )
- goto ext_vcpucontext_out;
+ break;
if ( !is_hvm_domain(d) )
{
if ( !is_canonical_address(evc->sysenter_callback_eip) ||
!is_canonical_address(evc->syscall32_callback_eip) )
- goto ext_vcpucontext_out;
+ break;
fixup_guest_code_selector(d, evc->sysenter_callback_cs);
v->arch.pv_vcpu.sysenter_callback_cs =
evc->sysenter_callback_cs;
@@ -873,13 +876,11 @@ long arch_do_domctl(
v->arch.pv_vcpu.syscall32_disables_events =
evc->syscall32_disables_events;
}
- else
- /* We do not support syscall/syscall32/sysenter on 32-bit Xen. */
- if ( (evc->sysenter_callback_cs & ~3) ||
- evc->sysenter_callback_eip ||
- (evc->syscall32_callback_cs & ~3) ||
- evc->syscall32_callback_eip )
- goto ext_vcpucontext_out;
+ else if ( (evc->sysenter_callback_cs & ~3) ||
+ evc->sysenter_callback_eip ||
+ (evc->syscall32_callback_cs & ~3) ||
+ evc->syscall32_callback_eip )
+ break;
BUILD_BUG_ON(offsetof(struct xen_domctl_ext_vcpucontext,
mcg_cap) !=
@@ -896,13 +897,9 @@ long arch_do_domctl(
ret = vmce_restore_vcpu(v, &vmce);
}
+ else
+ ret = 0;
}
-
- ret = 0;
-
- ext_vcpucontext_out:
- if ( domctl->cmd == XEN_DOMCTL_get_ext_vcpucontext )
- copyback = 1;
}
break;
--
generated by git-patchbot for /home/xen/git/xen.git#stable-4.3
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |