[Crash-utility] [PATCH v2 1/3] vmware_vmss: get proper ITDR
d.hatayama at fujitsu.com
d.hatayama at fujitsu.com
Wed Oct 28 10:14:13 UTC 2020
> 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;
> }
Considering again, this is similar to the commit 8b50d94ada21f403665a5e562f40191f111e0313,
but where I restricted its target only on sadump format to avoid regression on other
formats. If it is needed by other formats, how about generalize it for other formats?
Current code is a bit hacky but could be cleaned up by removing the limitation on
sadump.
Thanks.
HATAYAMA, Daisuke
More information about the Crash-utility
mailing list