aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-x86/pgtable.h
diff options
context:
space:
mode:
authorSuresh Siddha <suresh.b.siddha@intel.com>2008-10-15 10:46:27 -0400
committerIngo Molnar <mingo@elte.hu>2008-10-15 12:20:14 -0400
commitf61f1b5717dec9968efd6c8d61bd73b7a61b72a0 (patch)
tree634419373c9bb3c545cefdebdc8b998f2aa01f6b /include/asm-x86/pgtable.h
parent3a1dfe6eefe483589c99c909202ffe1a20d589b5 (diff)
x86: fix compat-vdso
Jeff Chua reported that this patch: > -#define PTE_IDENT_ATTR 0x007 /* PRESENT+RW+USER */ > -#define PDE_IDENT_ATTR 0x067 /* PRESENT+RW+USER+DIRTY+ACCESSED */ > +#define PTE_IDENT_ATTR 0x003 /* PRESENT+RW */ > +#define PDE_IDENT_ATTR 0x063 /* PRESENT+RW+DIRTY+ACCESSED */ broke kernels with CONFIG_COMPAT_VDSO set with this init segfault: init[1]: segfault at ffffe01c up b7f0dc28 sp bfc26628 error 5 in ld-2.7.90.so[b7f0b000+1c000] Include USER bit in the PDE_IDENT_ATTR only, as the protection bits are combined from the PDE and PTE entries. This will allow the high mapped VDSO page in the case of CONFIG_COMPAT_VDSO to be user readable. Reported-by: Jeff Chua <jeff.chua.linux@gmail.com> Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> Tested-by: Jeff Chua <jeff.chua.linux@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/asm-x86/pgtable.h')
-rw-r--r--include/asm-x86/pgtable.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/include/asm-x86/pgtable.h b/include/asm-x86/pgtable.h
index ed932453ef26..e9f10af50f49 100644
--- a/include/asm-x86/pgtable.h
+++ b/include/asm-x86/pgtable.h
@@ -138,8 +138,13 @@
138#ifdef CONFIG_X86_64 138#ifdef CONFIG_X86_64
139#define __PAGE_KERNEL_IDENT_LARGE_EXEC __PAGE_KERNEL_LARGE_EXEC 139#define __PAGE_KERNEL_IDENT_LARGE_EXEC __PAGE_KERNEL_LARGE_EXEC
140#else 140#else
141/*
142 * For PDE_IDENT_ATTR include USER bit. As the PDE and PTE protection
143 * bits are combined, this will alow user to access the high address mapped
144 * VDSO in the presence of CONFIG_COMPAT_VDSO
145 */
141#define PTE_IDENT_ATTR 0x003 /* PRESENT+RW */ 146#define PTE_IDENT_ATTR 0x003 /* PRESENT+RW */
142#define PDE_IDENT_ATTR 0x063 /* PRESENT+RW+DIRTY+ACCESSED */ 147#define PDE_IDENT_ATTR 0x067 /* PRESENT+RW+USER+DIRTY+ACCESSED */
143#define PGD_IDENT_ATTR 0x001 /* PRESENT (no other attributes) */ 148#define PGD_IDENT_ATTR 0x001 /* PRESENT (no other attributes) */
144#endif 149#endif
145 150