perf/core: Fix perf_sample_regs_user() mm check
perf_sample_regs_user() uses 'current->mm' to test for the presence of userspace, but this is insufficient, consider use_mm(). A better test is: '!(current->flags & PF_KTHREAD)', exec() clears PF_KTHREAD after it sets the new ->mm but before it drops to userspace for the first time. Possibly obsoletes:bf05fc25f2
("powerpc/perf: Fix oops when kthread execs user process") Reported-by: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com> Reported-by: Young Xiao <92siuyang@gmail.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by: Will Deacon <will.deacon@arm.com> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Cc: Thomas Gleixner <tglx@linutronix.de> Fixes:4018994f3d
("perf: Add ability to attach user level registers dump to sample") Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
9e0babf2c0
commit
085ebfe937
|
@ -5923,7 +5923,7 @@ static void perf_sample_regs_user(struct perf_regs *regs_user,
|
||||||
if (user_mode(regs)) {
|
if (user_mode(regs)) {
|
||||||
regs_user->abi = perf_reg_abi(current);
|
regs_user->abi = perf_reg_abi(current);
|
||||||
regs_user->regs = regs;
|
regs_user->regs = regs;
|
||||||
} else if (current->mm) {
|
} else if (!(current->flags & PF_KTHREAD)) {
|
||||||
perf_get_regs_user(regs_user, regs, regs_user_copy);
|
perf_get_regs_user(regs_user, regs, regs_user_copy);
|
||||||
} else {
|
} else {
|
||||||
regs_user->abi = PERF_SAMPLE_REGS_ABI_NONE;
|
regs_user->abi = PERF_SAMPLE_REGS_ABI_NONE;
|
||||||
|
|
Loading…
Reference in New Issue