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;
 		}
 
openSUSE Build Service is sponsored by