]> www.infradead.org Git - users/willy/linux.git/commitdiff
fs/binfmt_elf: Use maple tree iterators for fill_files_note()
authorLiam R. Howlett <Liam.Howlett@Oracle.com>
Mon, 4 Jan 2021 19:44:16 +0000 (14:44 -0500)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Wed, 20 Oct 2021 20:00:33 +0000 (16:00 -0400)
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
fs/binfmt_elf.c

index 69d900a8473d4e39080635697796e9ec340b7b5e..2954f5c5e87fb2b2eacbd7290d90e1510fefe1eb 100644 (file)
@@ -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;