Skip to content

Commit

Permalink
powerpc/perf_counter: Fix vdso detection
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Anton Blanchard authored and Benjamin Herrenschmidt committed Sep 24, 2009
1 parent 8bbde7a commit f2053f1
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions arch/powerpc/kernel/vdso.c
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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;
Expand Down

0 comments on commit f2053f1

Please sign in to comment.