Re: [PATCH 1/6] x86: fix NX bit handling in change_page_attr

From: Jeremy Fitzhardinge
Date: Fri Jan 25 2008 - 02:46:36 EST


Huang, Ying wrote:
This patch fixes a bug of change_page_attr/change_page_attr_addr on
Intel i386/x86_64 CPUs. After changing page attribute to be
executable with these functions, the page remains un-executable on
Intel i386/x86_64 CPU. Because on Intel i386/x86_64 CPU, only if the
"NX" bits of all three level page tables are cleared (PAE is enabled),
the corresponding page is executable (refer to section 4.13.2 of Intel
64 and IA-32 Architectures Software Developer's Manual). So, the bug
is fixed through clearing the "NX" bit of PMD when splitting the huge
PMD.

Signed-off-by: Huang Ying <ying.huang@xxxxxxxxx>

---
arch/x86/mm/pageattr.c | 1 +
1 file changed, 1 insertion(+)

--- a/arch/x86/mm/pageattr.c
+++ b/arch/x86/mm/pageattr.c
@@ -124,6 +124,7 @@ static int split_large_page(pte_t *kpte,
/*
* Install the new, split up pagetable:
*/
+ pgprot_val(ref_prot) &= ~_PAGE_NX;

I don't think its a good idea to treat pgprot_val() as an lvalue - it precludes it from being turned into an inline function. I know there are numerous other places which do, but we should avoid making it worse.

J
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/