From 0355e40501d8796aa97b9b6adcc90f61e9de22be Mon Sep 17 00:00:00 2001 From: Peter Zijlstra Date: Fri, 5 Jun 2009 14:04:51 +0200 Subject: [PATCH] --- yaml --- r: 147667 b: refs/heads/master c: f7b6eb3fa07269da20dbbde8ba37a0273fdbd9c9 h: refs/heads/master i: 147665: ccaa3c1d13fc538445f838c9e20e19da1e0a5fd7 147663: 55ecf7f50bb2b3f07b4c6c099f1473fcd835227b v: v3 --- [refs] | 2 +- trunk/arch/x86/vdso/vdso32-setup.c | 6 +++++- trunk/arch/x86/vdso/vma.c | 7 +++++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 5c9cbd64cbbc..9dc184eb9633 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: cf1f45744c6fa3501e0a6f0ddc418f0ef27e725b +refs/heads/master: f7b6eb3fa07269da20dbbde8ba37a0273fdbd9c9 diff --git a/trunk/arch/x86/vdso/vdso32-setup.c b/trunk/arch/x86/vdso/vdso32-setup.c index 1241f118ab56..58bc00f68b12 100644 --- a/trunk/arch/x86/vdso/vdso32-setup.c +++ b/trunk/arch/x86/vdso/vdso32-setup.c @@ -338,6 +338,8 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) } } + current->mm->context.vdso = (void *)addr; + if (compat_uses_vma || !compat) { /* * MAYWRITE to allow gdb to COW and set breakpoints @@ -358,11 +360,13 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) goto up_fail; } - current->mm->context.vdso = (void *)addr; current_thread_info()->sysenter_return = VDSO32_SYMBOL(addr, SYSENTER_RETURN); up_fail: + if (ret) + current->mm->context.vdso = NULL; + up_write(&mm->mmap_sem); return ret; diff --git a/trunk/arch/x86/vdso/vma.c b/trunk/arch/x86/vdso/vma.c index 7133cdf9098b..93b7a2938b2f 100644 --- a/trunk/arch/x86/vdso/vma.c +++ b/trunk/arch/x86/vdso/vma.c @@ -115,15 +115,18 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) goto up_fail; } + current->mm->context.vdso = (void *)addr; + ret = install_special_mapping(mm, addr, vdso_size, VM_READ|VM_EXEC| VM_MAYREAD|VM_MAYWRITE|VM_MAYEXEC| VM_ALWAYSDUMP, vdso_pages); - if (ret) + if (ret) { + current->mm->context.vdso = NULL; goto up_fail; + } - current->mm->context.vdso = (void *)addr; up_fail: up_write(&mm->mmap_sem); return ret;