From d7e1cf7dd2a6b486e9bdb36debfae4841ee5e5f9 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 17 Nov 2020 05:08:20 +0300 Subject: [PATCH] vm: respect initial protection for allocation mapping Unused yet. --- rpcs3/Emu/Memory/vm.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/Memory/vm.cpp b/rpcs3/Emu/Memory/vm.cpp index 49cce82d32..8898982bad 100644 --- a/rpcs3/Emu/Memory/vm.cpp +++ b/rpcs3/Emu/Memory/vm.cpp @@ -733,11 +733,17 @@ namespace vm rsxthr->on_notify_memory_mapped(addr, size); } + auto prot = utils::protection::rw; + if (~flags & page_writable) + prot = utils::protection::ro; + if (~flags & page_readable) + prot = utils::protection::no; + if (!shm) { - utils::memory_protect(g_base_addr + addr, size, utils::protection::rw); + utils::memory_protect(g_base_addr + addr, size, prot); } - else if (shm->map_critical(g_base_addr + addr) != g_base_addr + addr || shm->map_critical(g_sudo_addr + addr) != g_sudo_addr + addr) + else if (shm->map_critical(g_base_addr + addr, prot) != g_base_addr + addr || shm->map_critical(g_sudo_addr + addr) != g_sudo_addr + addr) { fmt::throw_exception("Memory mapping failed - blame Windows (addr=0x%x, size=0x%x, flags=0x%x)", addr, size, flags); }