linux-stable/arch/powerpc/platforms
Haren Myneni e8df129860 powerpc/pseries/vas: Hold mmap_mutex after mmap lock during window close
[ Upstream commit b59c9dc4d9 ]

Commit 8ef7b9e176 ("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: 8ef7b9e176 ("powerpc/pseries/vas: Close windows with DLPAR core removal")
Signed-off-by: Haren Myneni <haren@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20230716100506.7833-1-haren@linux.ibm.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-08-03 10:23:48 +02:00
..
4xx powerpc: Fix all occurences of duplicate words 2022-07-25 12:05:15 +10:00
8xx powerpc/8xx: Add missing of_node_put() in tqm8xx_setup.c 2022-09-05 17:28:25 +10:00
40x powerpc: Remove asm/prom.h from all files that don't need it 2022-05-08 22:15:04 +10:00
44x powerpc/44x: Add of_node_put() when break out from for_each 2022-09-05 17:30:28 +10:00
52xx powerpc/52xx: Fix a resource leak in an error handling path 2022-12-31 13:32:50 +01:00
82xx powerpc: Add missing headers 2022-05-08 22:15:40 +10:00
83xx powerpc/83xx/mpc832x_rdb: call platform_device_put() in error case in of_fsl_spi_probe() 2022-12-31 13:32:51 +01:00
85xx powerpc: Cleanup idle for e500 2022-09-26 23:00:14 +10:00
86xx powerpc: Add missing headers 2022-05-08 22:15:40 +10:00
512x powerpc/mpc512x: fix resource printk format warning 2023-05-11 23:03:31 +09:00
amigaone powerpc: Add missing headers 2022-05-08 22:15:40 +10:00
book3s powerpc/vas: fix repeated words in comments 2022-09-06 11:03:04 +10:00
cell powerpc updates for 6.1 2022-10-09 14:05:15 -07:00
chrp powerpc: remove unused chrp_event_scan() declaration 2022-09-15 22:55:45 +10:00
embedded6xx powerpc/wii: fix resource printk format warnings 2023-05-11 23:03:31 +09:00
maple powerpc/maple: Add missing of_node_put() in time.c 2022-09-05 17:28:25 +10:00
microwatt random: remove CONFIG_ARCH_RANDOM 2022-07-18 15:03:37 +02:00
pasemi powerpc/pasemi: Use of_root in pas_pci_init() 2022-09-06 11:03:31 +10:00
powermac powerpc/powermac/udbg_scc: Add missing of_node_put()s in udbg_scc_init() 2022-09-05 17:30:30 +10:00
powernv powerpc/powernv/sriov: perform null check on iov before dereferencing iov 2023-07-19 16:21:39 +02:00
ps3 powerpc: Remove remaining parts of oprofile 2022-07-27 21:36:05 +10:00
pseries powerpc/pseries/vas: Hold mmap_mutex after mmap lock during window close 2023-08-03 10:23:48 +02:00
fsl_uli1575.c powerpc: Add missing headers 2022-05-08 22:15:40 +10:00
Kconfig powerpc: Rename PPC_NATIVE to PPC_HASH_MMU_NATIVE 2021-12-02 22:57:22 +11:00
Kconfig.cputype powerpc/64: Replace -mcpu=e500mc64 by -mcpu=e5500 2023-03-22 13:34:07 +01:00
Makefile powerpc: Add Microwatt platform 2021-06-21 21:15:26 +10:00