• Jann Horn's avatar
    binfmt_elf: take the mmap lock around find_extend_vma() · b2767d97
    Jann Horn authored
    create_elf_tables() runs after setup_new_exec(), so other tasks can
    already access our new mm and do things like process_madvise() on it.  (At
    the time I'm writing this commit, process_madvise() is not in mainline
    yet, but has been in akpm's tree for some time.)
    
    While I believe that there are currently no APIs that would actually allow
    another process to mess up our VMA tree (process_madvise() is limited to
    MADV_COLD and MADV_PAGEOUT, and uring and userfaultfd cannot reach an mm
    under which no syscalls have been executed yet), this seems like an
    accident waiting to happen.
    
    Let's make sure that we always take the mmap lock around GUP paths as long
    as another process might be able to see the mm.
    
    (Yes, this diff looks suspicious because we drop the lock before doing
    anything with `vma`, but that's because we actually don't do anything with
    it apart from the NULL check.)
    Signed-off-by: default avatarJann Horn <jannh@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Acked-by: default avatarMichel Lespinasse <walken@google.com>
    Cc: "Eric W . Biederman" <ebiederm@xmission.com>
    Cc: Jason Gunthorpe <jgg@nvidia.com>
    Cc: John Hubbard <jhubbard@nvidia.com>
    Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
    Cc: Sakari Ailus <sakari.ailus@linux.intel.com>
    Link: https://lkml.kernel.org/r/CAG48ez1-PBCdv3y8pn-Ty-b+FmBSLwDuVKFSt8h7wARLy0dF-Q@mail.gmail.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    b2767d97
binfmt_elf.c 60.4 KB