]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
kernel/fork: Detect mas_store() failure in dup_mmap()
authorLiam R. Howlett <Liam.Howlett@oracle.com>
Fri, 22 Jul 2022 15:53:50 +0000 (11:53 -0400)
committerLiam R. Howlett <Liam.Howlett@oracle.com>
Fri, 22 Jul 2022 19:09:46 +0000 (15:09 -0400)
mas_store() should not fail, but protect against potential failures by
checking the maple state for mas_is_err().

Fixes: 57579b57de57 (kernel/fork: use maple tree for dup_mmap() during forking)
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
kernel/fork.c

index 2d7ce88da5408a70c51a26327e6662d4501b40a7..dfa2d5d22ed1d0fe9e1c202646f3af5fe6b81920 100644 (file)
@@ -685,6 +685,8 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm,
                mas.index = tmp->vm_start;
                mas.last = tmp->vm_end - 1;
                mas_store(&mas, tmp);
+               if (mas_is_err(&mas))
+                       goto fail_nomem_mas_store;
 
                mm->map_count++;
                if (!(tmp->vm_flags & VM_WIPEONFORK))
@@ -708,6 +710,9 @@ out:
 fail_uprobe_end:
        uprobe_end_dup_mmap();
        return retval;
+
+fail_nomem_mas_store:
+       unlink_anon_vmas(tmp);
 fail_nomem_anon_vma_fork:
        mpol_put(vma_policy(tmp));
 fail_nomem_policy: