From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: [PATCH] x86/domctl: don't ignore errors from vmce_restore_vcpu() Date: Wed, 29 Jan 2014 16:34:30 +0000 Message-ID: <52E92D96.2070703@citrix.com> References: <52E933050200007800117FE2@nat28.tlf.novell.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3016993606684747766==" Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1W8Y5y-0008Ch-W8 for xen-devel@lists.xenproject.org; Wed, 29 Jan 2014 16:34:35 +0000 In-Reply-To: <52E933050200007800117FE2@nat28.tlf.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Jan Beulich Cc: George Dunlap , xen-devel , Keir Fraser List-Id: xen-devel@lists.xenproject.org --===============3016993606684747766== Content-Type: multipart/alternative; boundary="------------010905040200080009030108" --------------010905040200080009030108 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7bit On 29/01/14 15:57, Jan Beulich wrote: > 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 Reviewed-by: Andrew Cooper > > --- 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_pv_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; > > > > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel --------------010905040200080009030108 Content-Type: text/html; charset="ISO-8859-1" Content-Transfer-Encoding: 7bit
On 29/01/14 15:57, Jan Beulich wrote:
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@suse.com>

Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>


--- 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_pv_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;
 





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

--------------010905040200080009030108-- --===============3016993606684747766== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --===============3016993606684747766==--