Messages in this thread Patch in this message | | | Date | Mon, 19 May 2008 22:25:51 +0100 (BST) | From | Hugh Dickins <> | Subject | Re: [Bug 10732] REGRESSION: 2.6.26-rc2-git4: X server failed start onX61s laptop |
| |
On Sat, 17 May 2008, Theodore Tso wrote: > On Sat, May 17, 2008 at 08:32:38PM +0200, Gabriel C wrote: > > > > > > Which repository is commit 1c12c4cf in? > > > > It is in linus-git tree , http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1c12c4cf9411eb130b245fa8d0fbbaf989477c7b > > ...post 2.6.26-rc2-git3. For Linux kernels 2.6.26-rc2-git4 and > newer, you need to revert this commit or the X Server shipped with > Ubuntu Gutsy will die horribly when run on an X61s laptop with the > Intel 965GM video chipset. > > So the question is what's the right fix to keep the kernel compatible > with the X server, besides just reverting the commit entirely?
[PATCH] x86: fix mprotect's NX handling on PAE
2.6.26-rc3 with CONFIG_X86_PAE may leave the NX bit set when PROT_EXEC is intending to clear it, causing irqbalance and others to segfault, and X startup to fail.
This comes from an assumption in 1c12c4cf9411eb130b245fa8d0fbbaf989477c7b mprotect: prevent alteration of the PAT bits, that PTE_MASK is what it's supposed to be: whereas it's been wrong forever with PAE, staying 32-bit where 64-bit is needed.
Jeremy Fitzhardinge already has patches to fix that in Ingo's tree; but if they're not considered 2.6.26 material, or people want a quick two-liner to get working, here's a shorter hack to fix up pte_modify.
I apologize to those we've broken, and to Venki Pallipadi: it was I who persuaded him to change his working patch to make that false assumption.
Signed-off-by: Hugh Dickins <hugh@veritas.com> ---
include/asm-x86/pgtable.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
--- 2.6.26-rc3/include/asm-x86/pgtable.h 2008-05-19 11:19:03.000000000 +0100 +++ linux/include/asm-x86/pgtable.h 2008-05-19 21:51:08.000000000 +0100 @@ -57,8 +57,8 @@ #define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | \ _PAGE_DIRTY) -#define _PAGE_CHG_MASK (PTE_MASK | _PAGE_PCD | _PAGE_PWT | \ - _PAGE_ACCESSED | _PAGE_DIRTY) +#define _PAGE_CHG_MASK (((pteval_t) PTE_MASK & ~_PAGE_NX) | \ + _PAGE_PCD | _PAGE_PWT | _PAGE_ACCESSED | _PAGE_DIRTY) #define _PAGE_CACHE_MASK (_PAGE_PCD | _PAGE_PWT) #define _PAGE_CACHE_WB (0)
| |