diff --git a/vmware_vmss.c b/vmware_vmss.c
index b168f29..8aa0de0 100644
--- a/vmware_vmss.c
+++ b/vmware_vmss.c
@@ -881,6 +881,27 @@ vmware_vmss_get_cr3_idtr(ulong *cr3, ulong *idtr)
*cr3 = vmss.regs64[0]->cr[3];
*idtr = vmss.regs64[0]->idtr;
+ /*
+ * debug.guest is generated on guest triple fault. One of the possible
+ * ways to triple fault is: zeroing IDTR and int3.
+ * This is used in linux to reboot machine using triple fault:
+ * "reboot=t" cmdline.
+ * In that case CPU which triggered triple fault will have zeroed
+ * IDTR. IDTR and CR3 are used to calculate kaslr offset and phys
+ * base.
+ * If IDTR on CPU0 is zeroed and we have several CPUs, return IDTR from
+ * another CPU.
+ */
+ if (vmss.num_vcpus > 1 && *idtr == 0) {
+ int i;
+ for (i = 0; i < vmss.num_vcpus; i++) {
+ if (vmss.vcpu_regs[i] == REGS_PRESENT_ALL) {
+ *idtr = vmss.regs64[i]->idtr;
+ break;
+ }
+ }
+ }
+
return TRUE;
}
It looks that this is useful regardless of crash dump mechanism such as VMware, virsh
dump, sadump and so on.
Should be in kaslr_helper.c.
Thanks.
HATAYAMA, Daisuke