From 095fc6b996682998c2f3c76185faf91e2de134ba Mon Sep 17 00:00:00 2001 From: Michael Scire Date: Sun, 12 Jul 2020 22:22:54 -0700 Subject: [PATCH] kern: fix UpdateLock perms for ipc --- libraries/libmesosphere/source/kern_k_page_table_base.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libraries/libmesosphere/source/kern_k_page_table_base.cpp b/libraries/libmesosphere/source/kern_k_page_table_base.cpp index 5ca227324..48c68f130 100644 --- a/libraries/libmesosphere/source/kern_k_page_table_base.cpp +++ b/libraries/libmesosphere/source/kern_k_page_table_base.cpp @@ -2227,7 +2227,9 @@ namespace ams::kern { /* If anything was mapped, ipc-lock the pages. */ if (src_map_start < src_map_end) { - src_page_table.memory_block_manager.UpdateLock(std::addressof(allocator), src_map_start, (src_map_end - src_map_start) / PageSize, &KMemoryBlock::LockForIpc, KMemoryPermission_None); + /* Get the source permission. */ + const auto src_perm = static_cast((test_perm == KMemoryPermission_UserReadWrite) ? KMemoryPermission_KernelReadWrite | KMemoryPermission_NotMapped : KMemoryPermission_UserRead); + src_page_table.memory_block_manager.UpdateLock(std::addressof(allocator), src_map_start, (src_map_end - src_map_start) / PageSize, &KMemoryBlock::LockForIpc, src_perm); } /* We succeeded, so cancel our cleanup guard. */