2007-08-22 01:35:52

by Zachary Amsden

[permalink] [raw]
Subject: [PATCH] Fix lazy mode vmalloc synchronization for paravirt

Found this looping Ubuntu installs with VMI.

If unlucky enough to hit a vmalloc sync fault during a lazy mode
operation (from an IRQ handler for a module which was not yet populated
in current page directory, or from inside copy_one_pte, which touches
swap_map, and hit in an unused 4M region), the required PDE update would
never get flushed, causing an infinite page fault loop.

This bug affects any paravirt-ops backend which uses lazy updates, I
believe that makes it a bug in Xen, VMI and lguest. It only happens on
LOWMEM kernels.

Currently for 2.6.23, but we'll want to backport to -stable as well.

Zach


Attachments:
i386-linus-vmalloc-paravirt-fix.patch (823.00 B)

2007-08-22 06:28:34

by Jeremy Fitzhardinge

[permalink] [raw]
Subject: Re: [PATCH] Fix lazy mode vmalloc synchronization for paravirt

Zachary Amsden wrote:
> Found this looping Ubuntu installs with VMI.
>
> If unlucky enough to hit a vmalloc sync fault during a lazy mode
> operation (from an IRQ handler for a module which was not yet
> populated in current page directory, or from inside copy_one_pte,
> which touches swap_map, and hit in an unused 4M region), the required
> PDE update would never get flushed, causing an infinite page fault loop.

Ah, good catch.

> This bug affects any paravirt-ops backend which uses lazy updates, I
> believe that makes it a bug in Xen, VMI and lguest. It only happens
> on LOWMEM kernels.

No, under Xen the kernel/hypervisor PMD is not shared between processes,
so this is still used when PAE is enabled.

J

2007-08-22 06:57:36

by Zachary Amsden

[permalink] [raw]
Subject: Re: [PATCH] Fix lazy mode vmalloc synchronization for paravirt

Jeremy Fitzhardinge wrote:
> No, under Xen the kernel/hypervisor PMD is not shared between processes,
> so this is still used when PAE is enabled.
>

Ahh, yes. So this was a lucky catch for us. Non-PAE kernels seem to be
increasing in value at antique sales.

Zach