lguest: Revert 1ce70c4fac3c3954bd48c035f448793867592bc0, fix real problem.
authorRusty Russell <rusty@rustcorp.com.au>
Tue, 11 Mar 2008 14:35:57 +0000 (09:35 -0500)
committerRusty Russell <rusty@rustcorp.com.au>
Mon, 10 Mar 2008 22:35:58 +0000 (09:35 +1100)
commit4357bd9453b81e0a41db1dec16e06d74256b7560
tree4b23d512d6cbe26ac2b4a0dfaff7e415bd1dab7c
parent3fabc55f34b72720e8a10aa442bd3415a211edb3
lguest: Revert 1ce70c4fac3c3954bd48c035f448793867592bc0, fix real problem.

Ahmed managed to crash the Host in release_pgd(), which cannot be a Guest
bug, and indeed it wasn't.

The bug was that handing a 0 as the address of the toplevel page table
being manipulated can cause the lookup code in find_pgdir() to return
an uninitialized cache entry (we shadow up to 4 top level page tables
for each Guest).

Commit 37cc8d7f963ba2deec29c9b68716944516a3244f introduced this
behaviour in the Guest, uncovering the bug.

The patch which he submitted (which removed the /4 from the index
calculation) simply ensured that these high-indexed entries hit the
early exit path of guest_set_pmd().  But you get lots of segfaults in
guest userspace as the PMDs aren't being updated.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
arch/x86/lguest/boot.c
drivers/lguest/page_tables.c