diff mbox

[v3] x86/mce: handle reserved domain ID in XEN_MC_msrinject

Message ID 20160527133033.7412-1-haozhong.zhang@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Haozhong Zhang May 27, 2016, 1:30 p.m. UTC
Commit 26646f3 "x86/mce: translate passed-in GPA to host machine
address" and commit 4ddf474 "tools/xen-mceinj: Pass in GPA when
injecting through MSR_MCI_ADDR" forgot to consider reserved domain
ID and mistakenly add MC_MSRINJ_F_GPADDR flag for them, which in turn
causes bug reported by
http://lists.xenproject.org/archives/html/xen-devel/2016-05/msg02640.html.

This patch removes MC_MSRINK_F_GPADDR flag and checks this when injecting
to reserved domain IDs except DOMID_SELF, and treats the passed-in
address as host machine address.

Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
---
Changes in v3:
 * Refine check condition of domid.

Changes in v2:
 * Consider all reserved domain IDs rather than just DOMID_XEN.

v1 can be found at
http://lists.xenproject.org/archives/html/xen-devel/2016-05/msg02534.html.
---
 tools/tests/mce-test/tools/xen-mceinj.c |  5 ++++-
 xen/arch/x86/cpu/mcheck/mce.c           | 14 +++++++++++---
 2 files changed, 15 insertions(+), 4 deletions(-)

Comments

Jan Beulich May 27, 2016, 2:03 p.m. UTC | #1
>>> On 27.05.16 at 15:30, <haozhong.zhang@intel.com> wrote:
> Commit 26646f3 "x86/mce: translate passed-in GPA to host machine
> address" and commit 4ddf474 "tools/xen-mceinj: Pass in GPA when
> injecting through MSR_MCI_ADDR" forgot to consider reserved domain
> ID and mistakenly add MC_MSRINJ_F_GPADDR flag for them, which in turn
> causes bug reported by
> http://lists.xenproject.org/archives/html/xen-devel/2016-05/msg02640.html.
> 
> This patch removes MC_MSRINK_F_GPADDR flag and checks this when injecting
> to reserved domain IDs except DOMID_SELF, and treats the passed-in
> address as host machine address.
> 
> Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>

Reviewed-by: Jan Beulich <jbeulich@suse.com>
Wei Liu May 27, 2016, 2:06 p.m. UTC | #2
On Fri, May 27, 2016 at 08:03:42AM -0600, Jan Beulich wrote:
> >>> On 27.05.16 at 15:30, <haozhong.zhang@intel.com> wrote:
> > Commit 26646f3 "x86/mce: translate passed-in GPA to host machine
> > address" and commit 4ddf474 "tools/xen-mceinj: Pass in GPA when
> > injecting through MSR_MCI_ADDR" forgot to consider reserved domain
> > ID and mistakenly add MC_MSRINJ_F_GPADDR flag for them, which in turn
> > causes bug reported by
> > http://lists.xenproject.org/archives/html/xen-devel/2016-05/msg02640.html.
> > 
> > This patch removes MC_MSRINK_F_GPADDR flag and checks this when injecting
> > to reserved domain IDs except DOMID_SELF, and treats the passed-in
> > address as host machine address.
> > 
> > Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
> 
> Reviewed-by: Jan Beulich <jbeulich@suse.com>
> 

Release-acked-by: Wei Liu <wei.liu2@citrix.com>
Wei Liu May 27, 2016, 3:31 p.m. UTC | #3
On Fri, May 27, 2016 at 03:06:08PM +0100, Wei Liu wrote:
> On Fri, May 27, 2016 at 08:03:42AM -0600, Jan Beulich wrote:
> > >>> On 27.05.16 at 15:30, <haozhong.zhang@intel.com> wrote:
> > > Commit 26646f3 "x86/mce: translate passed-in GPA to host machine
> > > address" and commit 4ddf474 "tools/xen-mceinj: Pass in GPA when
> > > injecting through MSR_MCI_ADDR" forgot to consider reserved domain
> > > ID and mistakenly add MC_MSRINJ_F_GPADDR flag for them, which in turn
> > > causes bug reported by
> > > http://lists.xenproject.org/archives/html/xen-devel/2016-05/msg02640.html.
> > > 
> > > This patch removes MC_MSRINK_F_GPADDR flag and checks this when injecting
> > > to reserved domain IDs except DOMID_SELF, and treats the passed-in
> > > address as host machine address.
> > > 
> > > Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
> > 
> > Reviewed-by: Jan Beulich <jbeulich@suse.com>
> > 
> 
> Release-acked-by: Wei Liu <wei.liu2@citrix.com>

And queued.
Jan Beulich May 27, 2016, 4:06 p.m. UTC | #4
>>> On 27.05.16 at 17:31, <wei.liu2@citrix.com> wrote:
> On Fri, May 27, 2016 at 03:06:08PM +0100, Wei Liu wrote:
>> On Fri, May 27, 2016 at 08:03:42AM -0600, Jan Beulich wrote:
>> > >>> On 27.05.16 at 15:30, <haozhong.zhang@intel.com> wrote:
>> > > Commit 26646f3 "x86/mce: translate passed-in GPA to host machine
>> > > address" and commit 4ddf474 "tools/xen-mceinj: Pass in GPA when
>> > > injecting through MSR_MCI_ADDR" forgot to consider reserved domain
>> > > ID and mistakenly add MC_MSRINJ_F_GPADDR flag for them, which in turn
>> > > causes bug reported by
>> > > http://lists.xenproject.org/archives/html/xen-devel/2016-05/msg02640.html.
>> > > 
>> > > This patch removes MC_MSRINK_F_GPADDR flag and checks this when injecting
>> > > to reserved domain IDs except DOMID_SELF, and treats the passed-in
>> > > address as host machine address.
>> > > 
>> > > Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
>> > 
>> > Reviewed-by: Jan Beulich <jbeulich@suse.com>
>> > 
>> 
>> Release-acked-by: Wei Liu <wei.liu2@citrix.com>
> 
> And queued.

Please wait for a maintainer ack.

Jan
Wei Liu May 27, 2016, 4:14 p.m. UTC | #5
On Fri, May 27, 2016 at 10:06:31AM -0600, Jan Beulich wrote:
> >>> On 27.05.16 at 17:31, <wei.liu2@citrix.com> wrote:
> > On Fri, May 27, 2016 at 03:06:08PM +0100, Wei Liu wrote:
> >> On Fri, May 27, 2016 at 08:03:42AM -0600, Jan Beulich wrote:
> >> > >>> On 27.05.16 at 15:30, <haozhong.zhang@intel.com> wrote:
> >> > > Commit 26646f3 "x86/mce: translate passed-in GPA to host machine
> >> > > address" and commit 4ddf474 "tools/xen-mceinj: Pass in GPA when
> >> > > injecting through MSR_MCI_ADDR" forgot to consider reserved domain
> >> > > ID and mistakenly add MC_MSRINJ_F_GPADDR flag for them, which in turn
> >> > > causes bug reported by
> >> > > http://lists.xenproject.org/archives/html/xen-devel/2016-05/msg02640.html.
> >> > > 
> >> > > This patch removes MC_MSRINK_F_GPADDR flag and checks this when injecting
> >> > > to reserved domain IDs except DOMID_SELF, and treats the passed-in
> >> > > address as host machine address.
> >> > > 
> >> > > Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
> >> > 
> >> > Reviewed-by: Jan Beulich <jbeulich@suse.com>
> >> > 
> >> 
> >> Release-acked-by: Wei Liu <wei.liu2@citrix.com>
> > 
> > And queued.
> 
> Please wait for a maintainer ack.
> 

$ ./scripts/get_maintainer.pl -f xen/arch/x86/cpu/mcheck/mce.c
Christoph Egger <chegger@amazon.de>
Liu Jinsong <jinsong.liu@alibaba-inc.com>
Jan Beulich <jbeulich@suse.com>
Andrew Cooper <andrew.cooper3@citrix.com>
xen-devel@lists.xen.org

So I took it that your review was sufficient and pushed it.

It's already in staging. I can revert it now.

Wei.

> Jan
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
Wei Liu May 27, 2016, 4:16 p.m. UTC | #6
On Fri, May 27, 2016 at 05:14:08PM +0100, Wei Liu wrote:
> On Fri, May 27, 2016 at 10:06:31AM -0600, Jan Beulich wrote:
> > >>> On 27.05.16 at 17:31, <wei.liu2@citrix.com> wrote:
> > > On Fri, May 27, 2016 at 03:06:08PM +0100, Wei Liu wrote:
> > >> On Fri, May 27, 2016 at 08:03:42AM -0600, Jan Beulich wrote:
> > >> > >>> On 27.05.16 at 15:30, <haozhong.zhang@intel.com> wrote:
> > >> > > Commit 26646f3 "x86/mce: translate passed-in GPA to host machine
> > >> > > address" and commit 4ddf474 "tools/xen-mceinj: Pass in GPA when
> > >> > > injecting through MSR_MCI_ADDR" forgot to consider reserved domain
> > >> > > ID and mistakenly add MC_MSRINJ_F_GPADDR flag for them, which in turn
> > >> > > causes bug reported by
> > >> > > http://lists.xenproject.org/archives/html/xen-devel/2016-05/msg02640.html.
> > >> > > 
> > >> > > This patch removes MC_MSRINK_F_GPADDR flag and checks this when injecting
> > >> > > to reserved domain IDs except DOMID_SELF, and treats the passed-in
> > >> > > address as host machine address.
> > >> > > 
> > >> > > Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
> > >> > 
> > >> > Reviewed-by: Jan Beulich <jbeulich@suse.com>
> > >> > 
> > >> 
> > >> Release-acked-by: Wei Liu <wei.liu2@citrix.com>
> > > 
> > > And queued.
> > 
> > Please wait for a maintainer ack.
> > 
> 
> $ ./scripts/get_maintainer.pl -f xen/arch/x86/cpu/mcheck/mce.c
> Christoph Egger <chegger@amazon.de>
> Liu Jinsong <jinsong.liu@alibaba-inc.com>
> Jan Beulich <jbeulich@suse.com>
> Andrew Cooper <andrew.cooper3@citrix.com>
> xen-devel@lists.xen.org
> 

OK, so looking at MAINTAINERS file:

MACHINE CHECK (MCA) & RAS
M:      Christoph Egger <chegger@amazon.de>
M:      Liu Jinsong <jinsong.liu@alibaba-inc.com>
S:      Supported
F:      xen/arch/x86/cpu/mcheck/

I will revert this patch now. Sorry for all the trouble!

Wei.
Haozhong Zhang June 1, 2016, 6:38 a.m. UTC | #7
On 05/27/16 17:16, Wei Liu wrote:
> On Fri, May 27, 2016 at 05:14:08PM +0100, Wei Liu wrote:
> > On Fri, May 27, 2016 at 10:06:31AM -0600, Jan Beulich wrote:
> > > >>> On 27.05.16 at 17:31, <wei.liu2@citrix.com> wrote:
> > > > On Fri, May 27, 2016 at 03:06:08PM +0100, Wei Liu wrote:
> > > >> On Fri, May 27, 2016 at 08:03:42AM -0600, Jan Beulich wrote:
> > > >> > >>> On 27.05.16 at 15:30, <haozhong.zhang@intel.com> wrote:
> > > >> > > Commit 26646f3 "x86/mce: translate passed-in GPA to host machine
> > > >> > > address" and commit 4ddf474 "tools/xen-mceinj: Pass in GPA when
> > > >> > > injecting through MSR_MCI_ADDR" forgot to consider reserved domain
> > > >> > > ID and mistakenly add MC_MSRINJ_F_GPADDR flag for them, which in turn
> > > >> > > causes bug reported by
> > > >> > > http://lists.xenproject.org/archives/html/xen-devel/2016-05/msg02640.html.
> > > >> > > 
> > > >> > > This patch removes MC_MSRINK_F_GPADDR flag and checks this when injecting
> > > >> > > to reserved domain IDs except DOMID_SELF, and treats the passed-in
> > > >> > > address as host machine address.
> > > >> > > 
> > > >> > > Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
> > > >> > 
> > > >> > Reviewed-by: Jan Beulich <jbeulich@suse.com>
> > > >> > 
> > > >> 
> > > >> Release-acked-by: Wei Liu <wei.liu2@citrix.com>
> > > > 
> > > > And queued.
> > > 
> > > Please wait for a maintainer ack.
> > > 
> > 
> > $ ./scripts/get_maintainer.pl -f xen/arch/x86/cpu/mcheck/mce.c
> > Christoph Egger <chegger@amazon.de>
> > Liu Jinsong <jinsong.liu@alibaba-inc.com>
> > Jan Beulich <jbeulich@suse.com>
> > Andrew Cooper <andrew.cooper3@citrix.com>
> > xen-devel@lists.xen.org
> > 
> 
> OK, so looking at MAINTAINERS file:
> 
> MACHINE CHECK (MCA) & RAS
> M:      Christoph Egger <chegger@amazon.de>
> M:      Liu Jinsong <jinsong.liu@alibaba-inc.com>
> S:      Supported
> F:      xen/arch/x86/cpu/mcheck/
> 
> I will revert this patch now. Sorry for all the trouble!
> 
> Wei.

Hi Christoph and Jinsong,

Could you help to look at this patch set?

Thanks,
Haozhong
Wei Liu June 6, 2016, 1:08 p.m. UTC | #8
On Wed, Jun 01, 2016 at 02:38:17PM +0800, Haozhong Zhang wrote:
> On 05/27/16 17:16, Wei Liu wrote:
> > On Fri, May 27, 2016 at 05:14:08PM +0100, Wei Liu wrote:
> > > On Fri, May 27, 2016 at 10:06:31AM -0600, Jan Beulich wrote:
> > > > >>> On 27.05.16 at 17:31, <wei.liu2@citrix.com> wrote:
> > > > > On Fri, May 27, 2016 at 03:06:08PM +0100, Wei Liu wrote:
> > > > >> On Fri, May 27, 2016 at 08:03:42AM -0600, Jan Beulich wrote:
> > > > >> > >>> On 27.05.16 at 15:30, <haozhong.zhang@intel.com> wrote:
> > > > >> > > Commit 26646f3 "x86/mce: translate passed-in GPA to host machine
> > > > >> > > address" and commit 4ddf474 "tools/xen-mceinj: Pass in GPA when
> > > > >> > > injecting through MSR_MCI_ADDR" forgot to consider reserved domain
> > > > >> > > ID and mistakenly add MC_MSRINJ_F_GPADDR flag for them, which in turn
> > > > >> > > causes bug reported by
> > > > >> > > http://lists.xenproject.org/archives/html/xen-devel/2016-05/msg02640.html.
> > > > >> > > 
> > > > >> > > This patch removes MC_MSRINK_F_GPADDR flag and checks this when injecting
> > > > >> > > to reserved domain IDs except DOMID_SELF, and treats the passed-in
> > > > >> > > address as host machine address.
> > > > >> > > 
> > > > >> > > Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
> > > > >> > 
> > > > >> > Reviewed-by: Jan Beulich <jbeulich@suse.com>
> > > > >> > 
> > > > >> 
> > > > >> Release-acked-by: Wei Liu <wei.liu2@citrix.com>
> > > > > 
> > > > > And queued.
> > > > 
> > > > Please wait for a maintainer ack.
> > > > 
> > > 
> > > $ ./scripts/get_maintainer.pl -f xen/arch/x86/cpu/mcheck/mce.c
> > > Christoph Egger <chegger@amazon.de>
> > > Liu Jinsong <jinsong.liu@alibaba-inc.com>
> > > Jan Beulich <jbeulich@suse.com>
> > > Andrew Cooper <andrew.cooper3@citrix.com>
> > > xen-devel@lists.xen.org
> > > 
> > 
> > OK, so looking at MAINTAINERS file:
> > 
> > MACHINE CHECK (MCA) & RAS
> > M:      Christoph Egger <chegger@amazon.de>
> > M:      Liu Jinsong <jinsong.liu@alibaba-inc.com>
> > S:      Supported
> > F:      xen/arch/x86/cpu/mcheck/
> > 
> > I will revert this patch now. Sorry for all the trouble!
> > 
> > Wei.
> 
> Hi Christoph and Jinsong,
> 
> Could you help to look at this patch set?
> 

I think this is a bit too late for 4.7.0.

It can be backported when Christoph and Jinsong get around to it.

Wei.

> Thanks,
> Haozhong
Egger, Christoph June 6, 2016, 1:40 p.m. UTC | #9
On 27.05.16 15:30, Haozhong Zhang wrote:
> Commit 26646f3 "x86/mce: translate passed-in GPA to host machine
> address" and commit 4ddf474 "tools/xen-mceinj: Pass in GPA when
> injecting through MSR_MCI_ADDR" forgot to consider reserved domain
> ID and mistakenly add MC_MSRINJ_F_GPADDR flag for them, which in turn
> causes bug reported by
> http://lists.xenproject.org/archives/html/xen-devel/2016-05/msg02640.html.
> 
> This patch removes MC_MSRINK_F_GPADDR flag and checks this when injecting
> to reserved domain IDs except DOMID_SELF, and treats the passed-in
> address as host machine address.
> 
> Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>

Acked-by: Christoph Egger <chegger@amazon.de>

> ---
> Changes in v3:
>  * Refine check condition of domid.
> 
> Changes in v2:
>  * Consider all reserved domain IDs rather than just DOMID_XEN.
> 
> v1 can be found at
> http://lists.xenproject.org/archives/html/xen-devel/2016-05/msg02534.html.
> ---
>  tools/tests/mce-test/tools/xen-mceinj.c |  5 ++++-
>  xen/arch/x86/cpu/mcheck/mce.c           | 14 +++++++++++---
>  2 files changed, 15 insertions(+), 4 deletions(-)
> 
> diff --git a/tools/tests/mce-test/tools/xen-mceinj.c b/tools/tests/mce-test/tools/xen-mceinj.c
> index 061ec7c..51abc8a 100644
> --- a/tools/tests/mce-test/tools/xen-mceinj.c
> +++ b/tools/tests/mce-test/tools/xen-mceinj.c
> @@ -317,7 +317,10 @@ static int inject_mci_addr(xc_interface *xc_handle,
>                             domid_t domid)
>  {
>      return add_msr_bank_intpose(xc_handle, cpu_nr,
> -                                MC_MSRINJ_F_INTERPOSE | MC_MSRINJ_F_GPADDR,
> +                                MC_MSRINJ_F_INTERPOSE |
> +                                ((domid >= DOMID_FIRST_RESERVED &&
> +                                  domid != DOMID_SELF) ?
> +                                 0 : MC_MSRINJ_F_GPADDR),
>                                  MCi_type_ADDR, bank, val, domid);
>  }
>  
> diff --git a/xen/arch/x86/cpu/mcheck/mce.c b/xen/arch/x86/cpu/mcheck/mce.c
> index cc446eb..0244553 100644
> --- a/xen/arch/x86/cpu/mcheck/mce.c
> +++ b/xen/arch/x86/cpu/mcheck/mce.c
> @@ -1427,6 +1427,7 @@ long do_mca(XEN_GUEST_HANDLE_PARAM(xen_mc_t) u_xen_mc)
>  
>          if ( mc_msrinject->mcinj_flags & MC_MSRINJ_F_GPADDR )
>          {
> +            domid_t domid;
>              struct domain *d;
>              struct mcinfo_msr *msr;
>              unsigned int i;
> @@ -1434,10 +1435,17 @@ long do_mca(XEN_GUEST_HANDLE_PARAM(xen_mc_t) u_xen_mc)
>              unsigned long gfn, mfn;
>              p2m_type_t t;
>  
> -            d = get_domain_by_id(mc_msrinject->mcinj_domid);
> +            domid = (mc_msrinject->mcinj_domid == DOMID_SELF) ?
> +                    current->domain->domain_id : mc_msrinject->mcinj_domid;
> +            if ( domid >= DOMID_FIRST_RESERVED )
> +                return x86_mcerr("do_mca inject: incompatible flag "
> +                                 "MC_MSRINJ_F_GPADDR with domain %d",
> +                                 -EINVAL, domid);
> +
> +            d = get_domain_by_id(domid);
>              if ( d == NULL )
>                  return x86_mcerr("do_mca inject: bad domain id %d",
> -                                 -EINVAL, mc_msrinject->mcinj_domid);
> +                                 -EINVAL, domid);
>  
>              for ( i = 0, msr = &mc_msrinject->mcinj_msr[0];
>                    i < mc_msrinject->mcinj_count;
> @@ -1452,7 +1460,7 @@ long do_mca(XEN_GUEST_HANDLE_PARAM(xen_mc_t) u_xen_mc)
>                      put_gfn(d, gfn);
>                      put_domain(d);
>                      return x86_mcerr("do_mca inject: bad gfn %#lx of domain %d",
> -                                     -EINVAL, gfn, mc_msrinject->mcinj_domid);
> +                                     -EINVAL, gfn, domid);
>                  }
>  
>                  msr->value = pfn_to_paddr(mfn) | (gaddr & (PAGE_SIZE - 1));
>
Wei Liu June 6, 2016, 1:47 p.m. UTC | #10
On Mon, Jun 06, 2016 at 03:40:33PM +0200, Egger, Christoph wrote:
> On 27.05.16 15:30, Haozhong Zhang wrote:
> > Commit 26646f3 "x86/mce: translate passed-in GPA to host machine
> > address" and commit 4ddf474 "tools/xen-mceinj: Pass in GPA when
> > injecting through MSR_MCI_ADDR" forgot to consider reserved domain
> > ID and mistakenly add MC_MSRINJ_F_GPADDR flag for them, which in turn
> > causes bug reported by
> > http://lists.xenproject.org/archives/html/xen-devel/2016-05/msg02640.html.
> > 
> > This patch removes MC_MSRINK_F_GPADDR flag and checks this when injecting
> > to reserved domain IDs except DOMID_SELF, and treats the passed-in
> > address as host machine address.
> > 
> > Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
> 
> Acked-by: Christoph Egger <chegger@amazon.de>
> 

Thanks! I will see what I can with it for 4.7.0.

Wei.
diff mbox

Patch

diff --git a/tools/tests/mce-test/tools/xen-mceinj.c b/tools/tests/mce-test/tools/xen-mceinj.c
index 061ec7c..51abc8a 100644
--- a/tools/tests/mce-test/tools/xen-mceinj.c
+++ b/tools/tests/mce-test/tools/xen-mceinj.c
@@ -317,7 +317,10 @@  static int inject_mci_addr(xc_interface *xc_handle,
                            domid_t domid)
 {
     return add_msr_bank_intpose(xc_handle, cpu_nr,
-                                MC_MSRINJ_F_INTERPOSE | MC_MSRINJ_F_GPADDR,
+                                MC_MSRINJ_F_INTERPOSE |
+                                ((domid >= DOMID_FIRST_RESERVED &&
+                                  domid != DOMID_SELF) ?
+                                 0 : MC_MSRINJ_F_GPADDR),
                                 MCi_type_ADDR, bank, val, domid);
 }
 
diff --git a/xen/arch/x86/cpu/mcheck/mce.c b/xen/arch/x86/cpu/mcheck/mce.c
index cc446eb..0244553 100644
--- a/xen/arch/x86/cpu/mcheck/mce.c
+++ b/xen/arch/x86/cpu/mcheck/mce.c
@@ -1427,6 +1427,7 @@  long do_mca(XEN_GUEST_HANDLE_PARAM(xen_mc_t) u_xen_mc)
 
         if ( mc_msrinject->mcinj_flags & MC_MSRINJ_F_GPADDR )
         {
+            domid_t domid;
             struct domain *d;
             struct mcinfo_msr *msr;
             unsigned int i;
@@ -1434,10 +1435,17 @@  long do_mca(XEN_GUEST_HANDLE_PARAM(xen_mc_t) u_xen_mc)
             unsigned long gfn, mfn;
             p2m_type_t t;
 
-            d = get_domain_by_id(mc_msrinject->mcinj_domid);
+            domid = (mc_msrinject->mcinj_domid == DOMID_SELF) ?
+                    current->domain->domain_id : mc_msrinject->mcinj_domid;
+            if ( domid >= DOMID_FIRST_RESERVED )
+                return x86_mcerr("do_mca inject: incompatible flag "
+                                 "MC_MSRINJ_F_GPADDR with domain %d",
+                                 -EINVAL, domid);
+
+            d = get_domain_by_id(domid);
             if ( d == NULL )
                 return x86_mcerr("do_mca inject: bad domain id %d",
-                                 -EINVAL, mc_msrinject->mcinj_domid);
+                                 -EINVAL, domid);
 
             for ( i = 0, msr = &mc_msrinject->mcinj_msr[0];
                   i < mc_msrinject->mcinj_count;
@@ -1452,7 +1460,7 @@  long do_mca(XEN_GUEST_HANDLE_PARAM(xen_mc_t) u_xen_mc)
                     put_gfn(d, gfn);
                     put_domain(d);
                     return x86_mcerr("do_mca inject: bad gfn %#lx of domain %d",
-                                     -EINVAL, gfn, mc_msrinject->mcinj_domid);
+                                     -EINVAL, gfn, domid);
                 }
 
                 msr->value = pfn_to_paddr(mfn) | (gaddr & (PAGE_SIZE - 1));