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 187b3f2b9202..264e37903949 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -1612,6 +1612,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; @@ -1636,7 +1637,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; @@ -1665,6 +1667,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