diff options
-rw-r--r-- | fs/binfmt_elf.c | 8 | ||||
-rw-r--r-- | fs/proc/task_mmu.c | 6 | ||||
-rw-r--r-- | include/linux/mm.h | 6 |
3 files changed, 20 insertions, 0 deletions
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index aa3cb626671e..df9ea4186d75 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c | |||
@@ -1108,6 +1108,14 @@ static bool always_dump_vma(struct vm_area_struct *vma) | |||
1108 | /* Any vsyscall mappings? */ | 1108 | /* Any vsyscall mappings? */ |
1109 | if (vma == get_gate_vma(vma->vm_mm)) | 1109 | if (vma == get_gate_vma(vma->vm_mm)) |
1110 | return true; | 1110 | return true; |
1111 | |||
1112 | /* | ||
1113 | * Assume that all vmas with a .name op should always be dumped. | ||
1114 | * If this changes, a new vm_ops field can easily be added. | ||
1115 | */ | ||
1116 | if (vma->vm_ops && vma->vm_ops->name && vma->vm_ops->name(vma)) | ||
1117 | return true; | ||
1118 | |||
1111 | /* | 1119 | /* |
1112 | * arch_vma_name() returns non-NULL for special architecture mappings, | 1120 | * arch_vma_name() returns non-NULL for special architecture mappings, |
1113 | * such as vDSO sections. | 1121 | * such as vDSO sections. |
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 442177b1119a..9b2f5d62ce63 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c | |||
@@ -300,6 +300,12 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid) | |||
300 | goto done; | 300 | goto done; |
301 | } | 301 | } |
302 | 302 | ||
303 | if (vma->vm_ops && vma->vm_ops->name) { | ||
304 | name = vma->vm_ops->name(vma); | ||
305 | if (name) | ||
306 | goto done; | ||
307 | } | ||
308 | |||
303 | name = arch_vma_name(vma); | 309 | name = arch_vma_name(vma); |
304 | if (!name) { | 310 | if (!name) { |
305 | pid_t tid; | 311 | pid_t tid; |
diff --git a/include/linux/mm.h b/include/linux/mm.h index bf9811e1321a..63f8d4efe303 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -239,6 +239,12 @@ struct vm_operations_struct { | |||
239 | */ | 239 | */ |
240 | int (*access)(struct vm_area_struct *vma, unsigned long addr, | 240 | int (*access)(struct vm_area_struct *vma, unsigned long addr, |
241 | void *buf, int len, int write); | 241 | void *buf, int len, int write); |
242 | |||
243 | /* Called by the /proc/PID/maps code to ask the vma whether it | ||
244 | * has a special name. Returning non-NULL will also cause this | ||
245 | * vma to be dumped unconditionally. */ | ||
246 | const char *(*name)(struct vm_area_struct *vma); | ||
247 | |||
242 | #ifdef CONFIG_NUMA | 248 | #ifdef CONFIG_NUMA |
243 | /* | 249 | /* |
244 | * set_policy() op must add a reference to any non-NULL @new mempolicy | 250 | * set_policy() op must add a reference to any non-NULL @new mempolicy |