From: Arjan van de Ven Date: Wed, 30 Jan 2008 12:34:07 +0000 (+0100) Subject: x86: make sure initmem is writable X-Git-Tag: v2.6.25-rc1~1143^2~44 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c1df68b848b39270752ff8d4b956cc4a4dce0f6;p=linux-2.6 x86: make sure initmem is writable When we free initmem, various rodata and CPA checks may have left memory read only.. this patch ensures that the memory is writable before we free it. Signed-off-by: Arjan van de Ven Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c index 0d3369b900..4d11565451 100644 --- a/arch/x86/mm/init_32.c +++ b/arch/x86/mm/init_32.c @@ -780,6 +780,13 @@ void free_init_pages(char *what, unsigned long begin, unsigned long end) { unsigned long addr; + /* + * We just marked the kernel text read only above, now that + * we are going to free part of that, we need to make that + * writeable first. + */ + set_memory_rw(begin, (end - begin) >> PAGE_SHIFT); + for (addr = begin; addr < end; addr += PAGE_SIZE) { ClearPageReserved(virt_to_page(addr)); init_page_count(virt_to_page(addr)); diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 9b69fa54a8..f97ace7a55 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c @@ -570,6 +570,7 @@ void free_init_pages(char *what, unsigned long begin, unsigned long end) * 2Mb kernel mapping just for this debug feature. */ if (begin >= __START_KERNEL_map) { + set_memory_rw(begin, (end - begin)/PAGE_SIZE); set_memory_np(begin, (end - begin)/PAGE_SIZE); set_memory_nx(begin, (end - begin)/PAGE_SIZE); }