NX protection for kernel data : fix xen boot
PATCH 1/1 NX protection for kernel data : fix xen boot
I think it should be applied before 2.6.38 release, because without this patch S3 suspend doesn't work on x86_32 with CONFIG_DEBUG_RODATA.
Quoted 1 line
From
8e4bdefe9649a89c972974d94510f0c2bd2d0ea4Mon Sep 17 00:00:00 2001
From: Matthieu CASTET <[email protected]>
Date: Thu, 27 Jan 2011 21:36:07 +0100
Subject: [PATCH] NX protection for kernel data : fix 32 bits wakeup
32 bits wakeup realmode trampoline enable paging, while still in low memory.
We should make this memory !NX in order it works.
Signed-off-by Matthieu CASTET <[email protected]>
Tested-by Matthias Hopf <[email protected]>
--- arch/x86/mm/init_32.c | 8 ++++++++ arch/x86/mm/pageattr.c | 7 +++++++ 2 files changed, 15 insertions(+), 0 deletions(-)
arch/x86/mm/init_32.c +8 -0
@@ -227,6 +227,14 @@ page_table_range_init(unsigned long start, unsigned long end, pgd_t *pgd_base)static inline int is_kernel_text (unsigned long addr) { +#if defined(CONFIG_X86_32 ) && defined(CONFIG_ACPI_SLEEP ) +/* +* We need to make the wakeup trampoline in first 1MB !NX +*/ +if (addr >=PAGE_OFFSET && addr <= (PAGE_OFFSET + (1 <<20 ))) +return 1 ; +#endif +if (addr >= (unsigned long )_text && addr <= (unsigned long )__init_end)return 1 ;return 0 ;
arch/x86/mm/pageattr.c +7 -0
@@ -265,6 +265,13 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,if (pcibios_enabled &&within (pfn,BIOS_BEGIN >>PAGE_SHIFT ,BIOS_END >>PAGE_SHIFT ))pgprot_val (forbidden) |= _PAGE_NX;#endif +/* +* We need to make the wakeup trampoline in first 1MB !NX +*/ +#if defined(CONFIG_X86_32 ) && defined(CONFIG_ACPI_SLEEP ) +if (within (address,PAGE_OFFSET ,PAGE_OFFSET + (1 <<20 ))) +pgprot_val (forbidden) |= _PAGE_NX; +#endif /* * The kernel text needs to be executable for obvious reasons
Signature · 1 line
1.7.2.3