From 84d7bd515e96f61b01e2e9092f2dce05b263d025 Mon Sep 17 00:00:00 2001 From: Kai Huang Date: Fri, 23 May 2014 15:30:22 +0200 Subject: [PATCH] x86/MCE: bypass uninitialized vcpu in vMCE injection Dom0 may bring up less number of vCPUs than xen hypervisor actually created for it, and in this case, on Intel platform, vMCE injection to dom0 will fail due to injecting vMCE to uninitialized vcpu, and cause dom0 crash. Signed-off-by: Kai Huang Acked-by: Christoph Egger master commit: a07084525c126c596326dc1442dd218f522f51b4 master date: 2014-05-14 10:54:39 +0200 --- xen/arch/x86/cpu/mcheck/vmce.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/xen/arch/x86/cpu/mcheck/vmce.c b/xen/arch/x86/cpu/mcheck/vmce.c index af3b491742..58afe28cf2 100644 --- a/xen/arch/x86/cpu/mcheck/vmce.c +++ b/xen/arch/x86/cpu/mcheck/vmce.c @@ -357,6 +357,10 @@ int inject_vmce(struct domain *d, int vcpu) if ( vcpu != VMCE_INJECT_BROADCAST && vcpu != v->vcpu_id ) continue; + /* Don't inject to uninitialized VCPU. */ + if ( !v->is_initialised ) + continue; + if ( (is_hvm_domain(d) || guest_has_trap_callback(d, v->vcpu_id, TRAP_machine_check)) && !test_and_set_bool(v->mce_pending) )