This patch fixes a bug of change_page_attr/change_page_attr_addr on Intel x86_64 CPU. After changing page attribute to be executable with these functions, the page remains un-executable on Intel x86_64 CPU. Because on Intel x86_64 CPU, only if the "NX" bits of all four level page tables are cleared, 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@intel.com> --- Index: linux-2.6.23-rc2-mm2/arch/x86_64/mm/pageattr.c =================================================================== --- linux-2.6.23-rc2-mm2.orig/arch/x86_64/mm/pageattr.c 2007-08-17 12:50:25.000000000 +0800 +++ linux-2.6.23-rc2-mm2/arch/x86_64/mm/pageattr.c 2007-08-17 12:50:48.000000000 +0800 @@ -147,6 +147,7 @@ split = split_large_page(address, prot, ref_prot2); if (!split) return -ENOMEM; + pgprot_val(ref_prot2) &= ~_PAGE_NX; set_pte(kpte, mk_pte(split, ref_prot2)); kpte_page = split; } -
What happened with this? Still valid? -
The bug is probably latent there, but I don't think it can affect anything in the kernel because nothing in the kernel should change NX status as far as I know. Where did you see it? Anyways I would prefer to only clear the PMD NX when NX status actually changes on the PTE.Can you do that change? Anyways; it's really not very important. -Andi -
I found the problem for EFI runtime service supporting. Where the EFI This change is sufficient for Intel CPU. Because the NX bit of PTE is still there, no page will be made executable if not been set explicitly through PTE. For AMD CPU, will the page be made executable if the NX bit of PMD is cleared and the NX bit of PTE is set? If so, I will do the It is needed by EFI runtime service supporting. Best Regards, Huang Ying -
I am waiting for reviewing or merging. And I think it is still valid. Best Regards, Huang Ying -
| Satyam Sharma | Re: 2.6.23-rc6-mm1 |
| Robin Lee Powell | NFS hang + umount -f: better behaviour requested. |
| Tarkan Erimer | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Michal Piotrowski | Re: 2.6.22-rc4-mm2 |
git: | |
| Shawn Pearce | Re: [RFC] Submodules in GIT |
| Linus Torvalds | People unaware of the importance of "git gc"? |
| Martin Langhoff | Handling large files with GIT |
| Pierre Habouzit | [PATCH] git-revert is one of the most misunderstood command in git, help users out. |
| GVG GVG | ssh_exchange_identification: Connection closed by remote host |
| Douglas A. Tutty | OBSD's perspective on SELinux |
| askthelist | Packets Per Second Limit? |
| Christophe Rioux | OpenBSD as host for VMWare Server |
| Daniel J Blueman | [sky2, solved] transmit timeouts and firmware update... |
| Octavian Purdila | [RFC] support for IEEE 1588 |
| Johann Baudy | Packet mmap: TX RING and zero copy |
| Evgeniy Polyakov | [resend take 2 0/4] Distributed storage. |
