powerpc/perf_counter: Fix vdso detection
perf_counter uses arch_vma_name() to detect a vdso region which in turn uses current->mm->context.vdso_base. We need to initialise this before doing the mmap or else we fail to detect the vdso. Signed-off-by: Anton Blanchard <anton@samba.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
Родитель
8bbde7a706
Коммит
f2053f1a7b
|
@ -240,6 +240,13 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
|
|||
goto fail_mmapsem;
|
||||
}
|
||||
|
||||
/*
|
||||
* Put vDSO base into mm struct. We need to do this before calling
|
||||
* install_special_mapping or the perf counter mmap tracking code
|
||||
* will fail to recognise it as a vDSO (since arch_vma_name fails).
|
||||
*/
|
||||
current->mm->context.vdso_base = vdso_base;
|
||||
|
||||
/*
|
||||
* our vma flags don't have VM_WRITE so by default, the process isn't
|
||||
* allowed to write those pages.
|
||||
|
@ -260,11 +267,10 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
|
|||
VM_MAYREAD|VM_MAYWRITE|VM_MAYEXEC|
|
||||
VM_ALWAYSDUMP,
|
||||
vdso_pagelist);
|
||||
if (rc)
|
||||
if (rc) {
|
||||
current->mm->context.vdso_base = 0;
|
||||
goto fail_mmapsem;
|
||||
|
||||
/* Put vDSO base into mm struct */
|
||||
current->mm->context.vdso_base = vdso_base;
|
||||
}
|
||||
|
||||
up_write(&mm->mmap_sem);
|
||||
return 0;
|
||||
|
|
Загрузка…
Ссылка в новой задаче