On 04/11/2019 15:40, Andrew Cooper wrote:
> On 04/11/2019 15:33, Håkon Alstadheim wrote:
>> Den 04.11.2019 14:31, skrev Andrew Cooper:
>>> On 03/11/2019 10:23, Håkon Alstadheim wrote:
>>>
>>>> (XEN) [2019-11-02 14:09:46] d2v0 vmentry failure (reason 0x80000021):
>>>> Invalid guest state (0)
>>>> (XEN) [2019-11-02 14:09:46] ************* VMCS Area **************
>>>> (XEN) [2019-11-02 14:09:46] *** Guest State ***
>>>> (XEN) [2019-11-02 14:09:46] CR0: actual=0x0000000080050031,
>>>> shadow=0x0000000080050031, gh_mask=ffffffffffffffff
>>>> (XEN) [2019-11-02 14:09:46] CR4: actual=0x0000000000172678,
>>>> shadow=0x0000000000170678, gh_mask=ffffffffffe8f860
>>>> (XEN) [2019-11-02 14:09:46] CR3 = 0x00000000001aa002
>>>> (XEN) [2019-11-02 14:09:46] RSP = 0xffff8c0f4dd71e98
>>>> (0xffff8c0f4dd71e98)  RIP = 0xffffd18a040bb75e (0xffffd18a040bb75e)
>>>> (XEN) [2019-11-02 14:09:46] RFLAGS=0x00000187 (0x00000187)  DR7 =
>>>> 0x0000000000000400
>>>> (XEN) [2019-11-02 14:09:46] Sysenter RSP=0000000000000000
>>>> CS:RIP=0000:0000000000000000
>>>> (XEN) [2019-11-02 14:09:46]        sel  attr  limit   base
>>>> (XEN) [2019-11-02 14:09:46]   CS: 0010 0209b 00000000 0000000000000000
>>>> (XEN) [2019-11-02 14:09:46]   DS: 002b 0c0f3 ffffffff 0000000000000000
>>>> (XEN) [2019-11-02 14:09:46]   SS: 0018 04093 00000000 0000000000000000
>>>> (XEN) [2019-11-02 14:09:46]   ES: 002b 0c0f3 ffffffff 0000000000000000
>>>> (XEN) [2019-11-02 14:09:46]   FS: 0053 040f3 00003c00 0000000000000000
>>>> (XEN) [2019-11-02 14:09:46]   GS: 002b 0c0f3 ffffffff fffff8044ff80000
>>>> (XEN) [2019-11-02 14:09:46] GDTR:            00000057 fffff80459c61fb0
>>>> (XEN) [2019-11-02 14:09:46] LDTR: 0000 1c000 ffffffff 0000000000000000
>>>> (XEN) [2019-11-02 14:09:46] IDTR:            0000012f ffffd18a014a0980
>>>> (XEN) [2019-11-02 14:09:46]   TR: 0040 0008b 00000067 fffff80459c60000
>>>> (XEN) [2019-11-02 14:09:46] EFER(VMCS) = 0x0000000000000d01  PAT =
>>>> 0x0007010600070106
>>>> (XEN) [2019-11-02 14:09:46] PreemptionTimer = 0x00000000  SM Base =
>>>> 0x00000000
>>>> (XEN) [2019-11-02 14:09:46] DebugCtl = 0x0000000000000000
>>>> DebugExceptions = 0x0000000000000000
>>>> (XEN) [2019-11-02 14:09:46] Interruptibility = 00000002  ActivityState
>>>> = 00000000
>>>> (XEN) [2019-11-02 14:09:46] InterruptStatus = 0000
>>>> (XEN) [2019-11-02 14:09:46] *** Host State ***
>>>> (XEN) [2019-11-02 14:09:46] RIP = 0xffff82d080341950
>>>> (vmx_asm_vmexit_handler)  RSP = 0xffff83083ff0ff70
>>>> (XEN) [2019-11-02 14:09:46] CS=e008 SS=0000 DS=0000 ES=0000 FS=0000
>>>> GS=0000 TR=e040
>>>> (XEN) [2019-11-02 14:09:46] FSBase=0000000000000000
>>>> GSBase=0000000000000000 TRBase=ffff83083ff14000
>>>> (XEN) [2019-11-02 14:09:46] GDTBase=ffff83083ff03000
>>>> IDTBase=ffff83083ff07000
>>>> (XEN) [2019-11-02 14:09:46] CR0=0000000080050033 CR3=000000054dbea000
>>>> CR4=00000000001526e0
>>>> (XEN) [2019-11-02 14:09:46] Sysenter RSP=ffff83083ff0ffa0
>>>> CS:RIP=e008:ffff82d080395440
>>>> (XEN) [2019-11-02 14:09:46] EFER = 0x0000000000000d01  PAT =
>>>> 0x0000050100070406
>>>> (XEN) [2019-11-02 14:09:46] *** Control State ***
>>>> (XEN) [2019-11-02 14:09:46] PinBased=000000bf CPUBased=b62065fa
>>>> SecondaryExec=000017eb
>>>> (XEN) [2019-11-02 14:09:46] EntryControls=0000d3ff
>>>> ExitControls=002fefff
>>>> (XEN) [2019-11-02 14:09:46] ExceptionBitmap=00060002 PFECmask=00000000
>>>> PFECmatch=00000000
>>>> (XEN) [2019-11-02 14:09:46] VMEntry: intr_info=80000501
>>>> errcode=00000000 ilen=00000001
>>>> (XEN) [2019-11-02 14:09:46] VMExit: intr_info=80000501
>>>> errcode=00000000 ilen=00000001
>>>> (XEN) [2019-11-02 14:09:46]         reason=80000021
>>>> qualification=0000000000000000
>>>> (XEN) [2019-11-02 14:09:46] IDTVectoring: info=00000000
>>>> errcode=00000000
>>>> (XEN) [2019-11-02 14:09:46] TSC Offset = 0xfffff45ded46dd57  TSC
>>>> Multiplier = 0x0000000000000000
>>>> (XEN) [2019-11-02 14:09:46] TPR Threshold = 0x00  PostedIntrVec = 0xf5
>>>> (XEN) [2019-11-02 14:09:46] EPT pointer = 0x000000054e3a701e  EPTP
>>>> index = 0x0000
>>>> (XEN) [2019-11-02 14:09:46] PLE Gap=00000080 Window=00001000
>>>> (XEN) [2019-11-02 14:09:46] Virtual processor ID = 0x5a02 VMfunc
>>>> controls = 0000000000000000
>>>> (XEN) [2019-11-02 14:09:46] **************************************
>>>> (XEN) [2019-11-02 14:09:46] domain_crash called from vmx.c:3335
>>>> (XEN) [2019-11-02 14:09:46] Domain 2 (vcpu#0) crashed on cpu#2:
>>> Interruptibility = 00000002 (Blocked by Mov SS) and VMEntry:
>>> intr_info=80000501 (ICEBP)
>>>
>>> Dare I ask what you're running in your windows guest?  Unless it is a
>>> vulnerability test suite, I'm rather concerned.
>> Because I have pulled out all stops ? Well no particular reason. I've
>> asked my kids nicely not to poke any /more/ holes in the security on
>> the system. Probably should tighten up the ship. I have some conflict
>> going on between the hardware pci USB cards in the machine, so I
>> thought I'd see what would happen if I gave ASUS and whatever no-name
>> Taiwanese I have in there free rein. Nothing gained as far as I can
>> see, so I'll see about closing some of the more gaping holes. At least
>> as far as getting rid of deprecation warnings go :-) .
>>
>> I hope "they" never get serious about requiring a license to own a
>> computer with Internet access. :-)
> Something in the VM is attempting to exploit XSA-260 / CVE-2018-8897
> against the guest kernel, using a variation of the attack.
>
> Xen should cope with the entry conditions correctly, and I think I've
> figured out a fairly non-invasive way of fixing this particular case
> without the full-blown #DB rework.

Ok - something more complicated is going on here.  I can't reproduce the
corner case in the obvious way.

Can you apply this debugging patch and try to reproduce the issue?  I
want to confirm which instructions the guest is executing.

~Andrew
diff --git a/xen/arch/x86/hvm/vmx/vmcs.c b/xen/arch/x86/hvm/vmx/vmcs.c
index ed27e8def7..3ca3671a9e 100644
--- a/xen/arch/x86/hvm/vmx/vmcs.c
+++ b/xen/arch/x86/hvm/vmx/vmcs.c
@@ -2025,6 +2025,30 @@ void vmcs_dump_vcpu(struct vcpu *v)
         printk("Virtual processor ID = 0x%04x VMfunc controls = %016lx\n",
                vmr16(VIRTUAL_PROCESSOR_ID), vmr(VM_FUNCTION_CONTROL));
 
+    {
+        struct hvm_emulate_ctxt ctxt;
+        const struct segment_register *cs;
+
+        hvm_emulate_init_once(&ctxt, NULL, regs);
+
+        cs = &ctxt.seg_reg[x86_seg_cs];
+
+        {
+            uint32_t walk = ((ctxt.seg_reg[x86_seg_ss].dpl == 3)
+                             ? PFEC_user_mode : 0) | PFEC_insn_fetch;
+            unsigned long addr;
+            char bytes[32];
+
+            if ( hvm_virtual_to_linear_addr(x86_seg_cs, cs, regs->rip - 16,
+                                            sizeof(bytes), hvm_access_insn_fetch,
+                                            cs, &addr) &&
+                 (hvm_copy_from_guest_linear(bytes, addr, sizeof(bytes),
+                                             walk, NULL) == HVMTRANS_okay) )
+                printk("*** Insn bytes from %lx: %16ph <%02x> %15ph\n",
+                       addr, bytes, (unsigned int)bytes[16], &bytes[17]);
+        }
+    }
+
     vmx_vmcs_exit(v);
 }
 
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Reply via email to