File 20204-x86-mce-panic.patch of Package xen
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1253003141 -3600
# Node ID 56595ee2720aded81ff3690948be5bcffe2b562c
# Parent 5eb18970469000dc6636c4839dd071b56cfd9abd
x86 mce: Fix panic in mcheck_mca_logout
I met the following panic message in mcheck_mca_logout().
MSR_IA32_MCi_ADDR might take the values other than the machine
address. FATAL PAGE FAULT occured when the non-existent address is
passed to maddr_get_owner().
Signed-off-by: Kazuhiro Suzuki <kaz@jp.fujitsu.com>
--- a/xen/arch/x86/cpu/mcheck/amd_k8.c
+++ b/xen/arch/x86/cpu/mcheck/amd_k8.c
@@ -148,8 +148,8 @@ void k8_machine_check(struct cpu_user_re
if (status & MCi_STATUS_ADDRV) {
rdmsrl(MSR_IA32_MC0_ADDR + 4 * i, addrv);
- d = maddr_get_owner(addrv);
- if (d != NULL)
+ if (mfn_valid(paddr_to_pfn(addrv))
+ && (d = maddr_get_owner(addrv)) != NULL)
mc_info.mc_domid = d->domain_id;
}
--- a/xen/arch/x86/cpu/mcheck/amd_nonfatal.c
+++ b/xen/arch/x86/cpu/mcheck/amd_nonfatal.c
@@ -143,8 +143,8 @@ void mce_amd_checkregs(void *info)
if (status & MCi_STATUS_ADDRV) {
rdmsrl(MSR_IA32_MC0_ADDR + i * 4, addrv);
- d = maddr_get_owner(addrv);
- if (d != NULL)
+ if (mfn_valid(paddr_to_pfn(addrv))
+ && (d = maddr_get_owner(addrv)) != NULL)
mc_info.mc_domid = d->domain_id;
}