• Haren Myneni's avatar
    powerpc/pseries/vas: Hold mmap_mutex after mmap lock during window close · b59c9dc4
    Haren Myneni authored
    Commit 8ef7b9e1 ("powerpc/pseries/vas: Close windows with DLPAR
    core removal") unmaps the window paste address and issues HCALL to
    close window in the hypervisor for migration or DLPAR core removal
    events. So holds mmap_mutex and then mmap lock before unmap the
    paste address. But if the user space issue mmap paste address at
    the same time with the migration event, coproc_mmap() is called
    after holding the mmap lock which can trigger deadlock when trying
    to acquire mmap_mutex in coproc_mmap().
    
    t1: mmap() call to mmap              t2: Migration event
        window paste address
    
    do_mmap2()                           migration_store()
     ksys_mmap_pgoff()                    pseries_migrate_partition()
      vm_mmap_pgoff()                      vas_migration_handler()
        Acquire mmap lock                   reconfig_close_windows()
        do_mmap()                             lock mmap_mutex
         mmap_region()                        Acquire mmap lock
          call_mmap()                         //Wait for mmap lock
           coproc_mmap()                        unmap vma
             lock mmap_mutex                    update window status
             //wait for mmap_mutex            Release mmap lock
              mmap vma                        unlock mmap_mutex
              update window status
             unlock mmap_mutex
        ...
        Release mmap lock
    
    Fix this deadlock issue by holding mmap lock first before mmap_mutex
    in reconfig_close_windows().
    
    Fixes: 8ef7b9e1 ("powerpc/pseries/vas: Close windows with DLPAR core removal")
    Signed-off-by: default avatarHaren Myneni <haren@linux.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20230716100506.7833-1-haren@linux.ibm.com
    b59c9dc4
vas.c 29.1 KB