Oops

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

 



Jeremy Fitzhardinge wrote:
>> Looks like a slot-3 pmd got reused for slot-0, with some stale entries
>> for the hypervisor hole in there for some reason ...
>>
>> quick and dirty sledge hammer fix:
>>
>> --- paravirt-2.6.20-rc4-hg691.orig/arch/i386/paravirt-xen/enlighten.c
>> +++ paravirt-2.6.20-rc4-hg691/arch/i386/paravirt-xen/enlighten.c
>> @@ -522,6 +522,7 @@ static fastcall void xen_alloc_pd(u32 pf
>>  static fastcall void xen_release_pd(u32 pfn)
>>  {
>>         make_lowmem_page_readwrite(__va(PFN_PHYS(pfn)));
>> +       memset(__va(PFN_PHYS(pfn)), 0, PAGE_SIZE);
>>  }
>>
>>  static fastcall void xen_release_pt(u32 pfn)
>>   
> 
> Does this work?
> 
> diff -r 252f3ed87072 arch/i386/mm/pgtable.c
> --- a/arch/i386/mm/pgtable.c    Mon Jan 08 16:57:56 2007 -0800
> +++ b/arch/i386/mm/pgtable.c    Wed Jan 10 13:13:40 2007 -0800
> @@ -265,6 +265,7 @@ static void pgd_ctor(pgd_t *pgd)
>                                         swapper_pg_dir + USER_PTRS_PER_PGD,
>                                         KERNEL_PGD_PTRS);
>                 } else {
> +                       memset(pgd, 0, USER_PTRS_PER_PGD*sizeof(pgd_t));
>                         spin_lock_irqsave(&pgd_lock, flags);
>                         pgd_list_add(pgd);
>                         spin_unlock_irqrestore(&pgd_lock, flags);

Didn't try (yet), but I don't think so.  It's not the pgd which is
broken, but the pmd.  And I think this way:

  (1) pmd is created
  (2) pmd is taken out of the slabcache and used for the kernel/xen
      address space (i.e. slot-3 in the PAE pgd).
  (3) xen fills in the page table entries for the hypervisor hole
  (4) pmd released and put back into the slab cache.
  (5) pmd gets reused, but for userspace addresses this time (pgd
      slot 0-2).
  (6) xen_pin() finds the stale entries for the hypervisor hole
  ==> Oops.

cheers,
  Gerd

-- 
Gerd Hoffmann <kraxel at suse.de>


[Index of Archives]     [KVM Development]     [Libvirt Development]     [Libvirt Users]     [CentOS Virtualization]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux