--- x/fs/proc/task_mmu.c +++ t/fs/proc/task_mmu.c @@ -277,7 +277,7 @@ show_map_vma(struct seq_file *m, struct struct mm_struct *mm = vma->vm_mm; struct file *file = vma->vm_file; vm_flags_t flags = vma->vm_flags; - struct anon_vma_name *anon_name; + struct anon_vma_name *anon_name = NULL; unsigned long ino = 0; unsigned long long pgoff = 0; unsigned long start, end; @@ -294,7 +294,13 @@ show_map_vma(struct seq_file *m, struct start = vma->vm_start; end = vma->vm_end; show_vma_header_prefix(m, start, end, flags, pgoff, dev, ino); - anon_name = anon_vma_name(vma); + if (mm) { + if (mmap_read_lock_killable(mm)) + goto done; + anon_name = anon_vma_name(vma); + anon_vma_name_get(anon_name); + mmap_read_unlock(mm); + } /* * Print the dentry name for named mappings, and a @@ -349,6 +355,7 @@ done: seq_puts(m, name); } seq_putc(m, '\n'); + anon_vma_name_put(anon_name); } static int show_map(struct seq_file *m, void *v)