[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] pvops dom0 work roadmap



On 08/20/09 16:17, M A Young wrote:
> On Thu, 20 Aug 2009, Jeremy Fitzhardinge wrote:
>
>> On i386, if %gs hasn't been loaded properly then using it as a base for
>> a memory access will GP.
>>
>> Try this:
>>
>> diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
>> index 2e58099..3ebcbb2 100644
>> --- a/arch/x86/xen/enlighten.c
>> +++ b/arch/x86/xen/enlighten.c
>> @@ -51,6 +51,7 @@
>> #include <asm/pgtable.h>
>> #include <asm/tlbflush.h>
>> #include <asm/reboot.h>
>> +#include <asm/stackprotector.h>
>>
>> #include "xen-ops.h"
>> #include "mmu.h"
>> @@ -1013,13 +1014,8 @@ asmlinkage void __init xen_start_kernel(void)
>>     pv_apic_ops = xen_apic_ops;
>>     pv_mmu_ops = xen_mmu_ops;
>>
>> -#ifdef CONFIG_X86_64
>> -    /*
>> -     * Setup percpu state.  We only need to do this for 64-bit
>> -     * because 32-bit already has %fs set properly.
>> -     */
>> -    load_percpu_segment(0);
>> -#endif
>> +    setup_stack_canary_segment(0);
>> +    switch_to_new_gdt(0);
>>
>>     xen_init_irq_ops();
>>     xen_init_cpuid_mask();
>
> It crashes with this patch (x86_64 also crashes) as follows

Yeah that was a bit of a shot in the dark; I'd been avoiding setting the
GDT that early because its all a bit fragile, and aside from
stack-protector we can get away with Xen's GDT for quite a while.

Hm, its pretty fiddly...  Let me see what I can come up with.

>
> (XEN) *** Serial input -> DOM0 (type 'CTRL-a' three times to switch
> input to Xen)
> (XEN) Freed 116kB init memory.
> (XEN) d0:v0: unhandled page fault (ec=0000)
> (XEN) Pagetable walk from 00000014:
> (XEN)  L3[0x000] = 000000003a032001 00002032
> (XEN)  L2[0x000] = 0000000000000000 ffffffff
> (XEN) domain_crash_sync called from entry.S (ff1b221e)
> (XEN) Domain 0 (vcpu#0) crashed on cpu#0:
> (XEN) ----[ Xen-3.4.1  x86_32p  debug=n  Not tainted ]----
> (XEN) CPU:    0
> (XEN) EIP:    e019:[<c04064cc>]
> (XEN) EFLAGS: 00000282   EM: 1   CONTEXT: pv guest
> (XEN) eax: c0b1c0e0   ebx: c0b1c0e0   ecx: 00000010   edx: 0000001c
> (XEN) esi: c0aa3fd8   edi: c0a1592c   ebp: c0aa3fb8   esp: c0aa3f94
> (XEN) cr0: 8005003b   cr4: 000006f0   cr3: 3a031000   cr2: 00000014
> (XEN) ds: e021   es: e021   fs: e021   gs: e021   ss: e021   cs: e019
> (XEN) Guest stack trace from esp=c0aa3f94:
> (XEN)    00000000 c04064cc 0001e019 00010082 00000000 00000000
> 00000010 c0aa3fd8
>
> (XEN)    c0a1592c c0aa3fcc c0403e3f 00000010 c0ae93f4 c0a1592c
> c0aa3ffc c0aab798
>
> (XEN)    00000010 e0f00018 c04090b1 00000000 00000000 00000000
> 00000000 00000000
>
> (XEN)    c2030000 00000000 00000000
> (XEN) Domain 0 crashed: rebooting machine in 5 seconds.
>
> The instruction and context is
> (gdb) x/i 0xc04064cc
> 0xc04064cc <arbitrary_virt_to_machine+16>:    mov    %gs:0x14,%eax
> (gdb) x/15i arbitrary_virt_to_machine
> 0xc04064bc <arbitrary_virt_to_machine>:    push   %ebp
> 0xc04064bd <arbitrary_virt_to_machine+1>:    mov    %esp,%ebp
> 0xc04064bf <arbitrary_virt_to_machine+3>:    push   %edi
> 0xc04064c0 <arbitrary_virt_to_machine+4>:    push   %esi
> 0xc04064c1 <arbitrary_virt_to_machine+5>:    push   %ebx
> 0xc04064c2 <arbitrary_virt_to_machine+6>:    sub    $0x8,%esp
> 0xc04064c5 <arbitrary_virt_to_machine+9>:    call   0xc040bc14 <mcount>
> 0xc04064ca <arbitrary_virt_to_machine+14>:    mov    %eax,%ebx
> 0xc04064cc <arbitrary_virt_to_machine+16>:    mov    %gs:0x14,%eax
> 0xc04064d2 <arbitrary_virt_to_machine+22>:    mov    %eax,-0x10(%ebp)
> 0xc04064d5 <arbitrary_virt_to_machine+25>:    xor    %eax,%eax
> 0xc04064d7 <arbitrary_virt_to_machine+27>:    mov    %ebx,%eax
> 0xc04064d9 <arbitrary_virt_to_machine+29>:
>     call   0xc042f95c <__virt_addr_valid>
> 0xc04064de <arbitrary_virt_to_machine+34>:    test   %al,%al
> 0xc04064e0 <arbitrary_virt_to_machine+36>:
>     je     0xc040650e <arbitrary_virt_to_machine+82>
>
>     Michael Young
>

Thanks,
    J

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.