From 37d7c313a9751712cf08d5d9726bb861dfe15e97 Mon Sep 17 00:00:00 2001 From: "Huang, Ying" Date: Wed, 30 Jan 2008 13:34:04 +0100 Subject: [PATCH] --- yaml --- r: 80501 b: refs/heads/master c: 4c881ca1819da180b047f87eedeb9a5957918705 h: refs/heads/master i: 80499: 0f38bd9206820fd0b4a3969561fae6a5c674408a v: v3 --- [refs] | 2 +- trunk/arch/x86/mm/pageattr.c | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 6cece0aafd64..4c8fe078bf5e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8192206df093e8fc607b5072ce71a930d44f8638 +refs/heads/master: 4c881ca1819da180b047f87eedeb9a5957918705 diff --git a/trunk/arch/x86/mm/pageattr.c b/trunk/arch/x86/mm/pageattr.c index d18c41d752f3..cbe8e9223bee 100644 --- a/trunk/arch/x86/mm/pageattr.c +++ b/trunk/arch/x86/mm/pageattr.c @@ -130,8 +130,13 @@ static int split_large_page(pte_t *kpte, unsigned long address) set_pte(&pbase[i], pfn_pte(addr >> PAGE_SHIFT, ref_prot)); /* - * Install the new, split up pagetable: + * Install the new, split up pagetable. Important detail here: + * + * On Intel the NX bit of all levels must be cleared to make a + * page executable. See section 4.13.2 of Intel 64 and IA-32 + * Architectures Software Developer's Manual). */ + ref_prot = pte_pgprot(pte_mkexec(pte_clrhuge(*kpte))); __set_pmd_pte(kpte, address, mk_pte(base, ref_prot)); base = NULL;