mm: assert mmap write lock held on do_mmap(), mmap_region()
authorLorenzo Stoakes <lorenzo.stoakes@oracle.com>
Thu, 12 Dec 2024 11:48:41 +0000 (11:48 +0000)
committerAndrew Morton <akpm@linux-foundation.org>
Tue, 14 Jan 2025 06:40:59 +0000 (22:40 -0800)
Both of these functions can be invoked outside of mm, so it is probably a
good idea to assert that the required lock is held.

Will only have an impact if CONFIG_DEBUG_VM is set, otherwise this amounts
to no change at all.

Link: https://lkml.kernel.org/r/20241212114841.55185-1-lorenzo.stoakes@oracle.com
Signed-off-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Cc: Jann Horn <jannh@google.com>
Cc: Liam R. Howlett <Liam.Howlett@Oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/mmap.c

index df9154b..43ef850 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -291,6 +291,8 @@ unsigned long do_mmap(struct file *file, unsigned long addr,
 
        *populate = 0;
 
+       mmap_assert_write_locked(mm);
+
        if (!len)
                return -EINVAL;
 
@@ -1023,6 +1025,8 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
        unsigned long ret;
        bool writable_file_mapping = false;
 
+       mmap_assert_write_locked(current->mm);
+
        /* Check to see if MDWE is applicable. */
        if (map_deny_write_exec(vm_flags, vm_flags))
                return -EACCES;