Jeremy Fitzhardinge 617d34d9e5 x86, mm: Hold mm->page_table_lock while doing vmalloc_sync
Take mm->page_table_lock while syncing the vmalloc region.  This prevents
a race with the Xen pagetable pin/unpin code, which expects that the
page_table_lock is already held.  If this race occurs, then Xen can see
an inconsistent page type (a page can either be read/write or a pagetable
page, and pin/unpin converts it between them), which will cause either
the pin or the set_p[gm]d to fail; either will crash the kernel.

vmalloc_sync_all() should be called rarely, so this extra use of
page_table_lock should not interfere with its normal users.

The mm pointer is stashed in the pgd page's index field, as that won't
be otherwise used for pgds.

Reported-by: Ian Campbell <ian.cambell@eu.citrix.com>
Originally-by: Jan Beulich <jbeulich@novell.com>
LKML-Reference: <4CB88A4C.1080305@goop.org>
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2010-10-19 13:57:08 -07:00
..
2010-06-08 21:13:48 +02:00
2010-08-02 08:45:56 -07:00
2010-04-06 15:52:11 -07:00
2010-04-28 17:25:53 -07:00
2010-02-16 21:22:26 -08:00
2010-05-07 17:13:04 -07:00
2010-03-10 13:23:34 +01:00
2010-08-14 22:26:51 +02:00
2010-06-09 11:12:36 +02:00
2010-01-05 15:34:49 +09:00
2010-05-07 17:13:04 -07:00
2010-08-02 08:45:56 -07:00
2010-02-12 09:42:39 -08:00
2010-07-20 17:41:14 -07:00
2010-01-22 16:05:42 -08:00
2010-08-01 10:46:31 +03:00