diff options
author | Török Edwin <edwintorok@gmail.com> | 2008-11-23 13:08:10 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-11-23 12:20:26 +0100 |
commit | e38da59269be8c0196d16dff1be5bb26076afc6a (patch) | |
tree | b43829f918725af5a2875f0244db62c4cc701c27 /kernel/trace | |
parent | 8d26487fd4ddda7a0237da418fb8669fb06ae557 (diff) | |
download | op-kernel-dev-e38da59269be8c0196d16dff1be5bb26076afc6a.zip op-kernel-dev-e38da59269be8c0196d16dff1be5bb26076afc6a.tar.gz |
tracing/stack-tracer: avoid races accessing file
Impact: fix race
vma->vm_file reference is only stable while holding the mmap_sem,
so move usage of it to within the critical section.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/trace')
-rw-r--r-- | kernel/trace/trace.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 4c3bd82..48d1536 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -1470,13 +1470,13 @@ static inline int seq_print_user_ip(struct trace_seq *s, struct mm_struct *mm, file = vma->vm_file; vmstart = vma->vm_start; } + if (file) { + ret = trace_seq_path(s, &file->f_path); + if (ret) + ret = trace_seq_printf(s, "[+0x%lx]", ip - vmstart); + } up_read(&mm->mmap_sem); } - if (file) { - ret = trace_seq_path(s, &file->f_path); - if (ret) - ret = trace_seq_printf(s, "[+0x%lx]", ip - vmstart); - } if (ret && ((sym_flags & TRACE_ITER_SYM_ADDR) || !file)) ret = trace_seq_printf(s, " <" IP_FMT ">", ip); return ret; |