From: "Liam R. Howlett" <Liam.Howlett@xxxxxxxxxx> Signed-off-by: Liam R. Howlett <Liam.Howlett@xxxxxxxxxx> --- fs/binfmt_elf.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index 439ed81e755a..4a13324aaba1 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -1614,6 +1614,7 @@ static int fill_files_note(struct memelfnote *note) user_long_t *data; user_long_t *start_end_ofs; char *name_base, *name_curpos; + MA_STATE(mas, &mm->mm_mt, 0, 0); /* *Estimated* file count and total data size needed */ count = mm->map_count; @@ -1638,7 +1639,8 @@ static int fill_files_note(struct memelfnote *note) name_base = name_curpos = ((char *)data) + names_ofs; remaining = size - names_ofs; count = 0; - for (vma = mm->mmap; vma != NULL; vma = vma->vm_next) { + rcu_read_lock(); + mas_for_each(&mas, vma, ULONG_MAX) { struct file *file; const char *filename; @@ -1667,6 +1669,7 @@ static int fill_files_note(struct memelfnote *note) *start_end_ofs++ = vma->vm_pgoff; count++; } + rcu_read_unlock(); /* Now we know exact count of files, can store it */ data[0] = count; -- 2.30.2