diff options
author | matthieu castet <[email protected]> | 2010-11-16 22:30:27 +0100 |
---|---|---|
committer | Ingo Molnar <[email protected]> | 2010-11-18 12:52:04 +0100 |
commit | 64edc8ed5ffae999d8d413ba006850e9e34166cb (patch) | |
tree | 8bbb5c5426e536ac199ab1aba37900ed73c4a822 /net/lapb/lapb_iface.c | |
parent | e53beacd23d9cb47590da6a7a7f6d417b941a994 (diff) |
x86: Fix improper large page preservation
This patch fixes a bug in try_preserve_large_page() which may
result in improper large page preservation and improper
application of page attributes to the memory area outside of the
original change request.
More specifically, the problem manifests itself when set_memory_*()
is called for several pages at the beginning of the large page and
try_preserve_large_page() erroneously concludes that the change can
be applied to whole large page.
The fix consists of 3 parts:
1. Addition of "required" protection attributes in
static_protections(), so .data and .bss can be guaranteed to
stay "RW"
2. static_protections() is now called for every small
page within large page to determine compatibility of new
protection attributes (instead of just small pages within the
requested range).
3. Large page can be preserved only if attribute change is
large-page-aligned and covers whole large page.
-v1: Try_preserve_large_page() patch for Linux 2.6.34-rc2
-v2: Replaced pfn check with address check for kernel rw-data
Signed-off-by: Siarhei Liakh <[email protected]>
Signed-off-by: Xuxian Jiang <[email protected]>
Reviewed-by: Suresh Siddha <[email protected]>
Cc: Arjan van de Ven <[email protected]>
Cc: James Morris <[email protected]>
Cc: Andi Kleen <[email protected]>
Cc: Rusty Russell <[email protected]>
Cc: Stephen Rothwell <[email protected]>
Cc: Dave Jones <[email protected]>
Cc: Kees Cook <[email protected]>
Cc: Linus Torvalds <[email protected]>
LKML-Reference: <[email protected]>
Signed-off-by: Ingo Molnar <[email protected]>
Diffstat (limited to 'net/lapb/lapb_iface.c')
0 files changed, 0 insertions, 0 deletions