diff options
Diffstat (limited to 'arch/x86/vdso/vma.c')
-rw-r--r-- | arch/x86/vdso/vma.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/arch/x86/vdso/vma.c b/arch/x86/vdso/vma.c index 7133cdf9098b..21e1aeb9f3ea 100644 --- a/arch/x86/vdso/vma.c +++ b/arch/x86/vdso/vma.c | |||
@@ -8,6 +8,7 @@ | |||
8 | #include <linux/sched.h> | 8 | #include <linux/sched.h> |
9 | #include <linux/init.h> | 9 | #include <linux/init.h> |
10 | #include <linux/random.h> | 10 | #include <linux/random.h> |
11 | #include <linux/elf.h> | ||
11 | #include <asm/vsyscall.h> | 12 | #include <asm/vsyscall.h> |
12 | #include <asm/vgtod.h> | 13 | #include <asm/vgtod.h> |
13 | #include <asm/proto.h> | 14 | #include <asm/proto.h> |
@@ -115,15 +116,18 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) | |||
115 | goto up_fail; | 116 | goto up_fail; |
116 | } | 117 | } |
117 | 118 | ||
119 | current->mm->context.vdso = (void *)addr; | ||
120 | |||
118 | ret = install_special_mapping(mm, addr, vdso_size, | 121 | ret = install_special_mapping(mm, addr, vdso_size, |
119 | VM_READ|VM_EXEC| | 122 | VM_READ|VM_EXEC| |
120 | VM_MAYREAD|VM_MAYWRITE|VM_MAYEXEC| | 123 | VM_MAYREAD|VM_MAYWRITE|VM_MAYEXEC| |
121 | VM_ALWAYSDUMP, | 124 | VM_ALWAYSDUMP, |
122 | vdso_pages); | 125 | vdso_pages); |
123 | if (ret) | 126 | if (ret) { |
127 | current->mm->context.vdso = NULL; | ||
124 | goto up_fail; | 128 | goto up_fail; |
129 | } | ||
125 | 130 | ||
126 | current->mm->context.vdso = (void *)addr; | ||
127 | up_fail: | 131 | up_fail: |
128 | up_write(&mm->mmap_sem); | 132 | up_write(&mm->mmap_sem); |
129 | return ret; | 133 | return ret; |