diff options
author | Suresh Siddha <suresh.b.siddha@intel.com> | 2008-10-15 10:46:27 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-10-15 12:20:14 -0400 |
commit | f61f1b5717dec9968efd6c8d61bd73b7a61b72a0 (patch) | |
tree | 634419373c9bb3c545cefdebdc8b998f2aa01f6b /include | |
parent | 3a1dfe6eefe483589c99c909202ffe1a20d589b5 (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')
-rw-r--r-- | include/asm-x86/pgtable.h | 7 |
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 | ||