tracing/stack-tracer: avoid races accessing file
authorTörök Edwin <edwintorok@gmail.com>
Sun, 23 Nov 2008 11:08:10 +0000 (13:08 +0200)
committerIngo Molnar <mingo@elte.hu>
Sun, 23 Nov 2008 11:20:26 +0000 (12:20 +0100)
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>
kernel/trace/trace.c

index 4c3bd82cec49c9debaf16c85a80cdaa3d83580b8..48d1536f1ca44c259eb3d4c4d61048061f5313b8 100644 (file)
@@ -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;