|
@@ -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) {
|
|
if (compat_uses_vma || !compat) {
|
|
/*
|
|
/*
|
|
* MAYWRITE to allow gdb to COW and set breakpoints
|
|
* 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;
|
|
goto up_fail;
|
|
}
|
|
}
|
|
|
|
|
|
- current->mm->context.vdso = (void *)addr;
|
|
|
|
current_thread_info()->sysenter_return =
|
|
current_thread_info()->sysenter_return =
|
|
VDSO32_SYMBOL(addr, SYSENTER_RETURN);
|
|
VDSO32_SYMBOL(addr, SYSENTER_RETURN);
|
|
|
|
|
|
up_fail:
|
|
up_fail:
|
|
|
|
+ if (ret)
|
|
|
|
+ current->mm->context.vdso = NULL;
|
|
|
|
+
|
|
up_write(&mm->mmap_sem);
|
|
up_write(&mm->mmap_sem);
|
|
|
|
|
|
return ret;
|
|
return ret;
|