From 0fec99e75b3ae510ca7a281041b4f875cae7d2cf Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 17 Nov 2020 14:53:41 +0300 Subject: [PATCH] SPU: absolutely unacceptable hack for SPU LS Make normal threads inaccessible in PS3 memory. --- rpcs3/Emu/Cell/SPUThread.cpp | 3 ++- rpcs3/Emu/Memory/vm.cpp | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index bd6803decf..c9c1cc0418 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -1672,7 +1672,8 @@ spu_thread::spu_thread(lv2_spu_group* group, u32 index, std::string_view name, u } else { - vm::get(vm::spu)->falloc(SPU_FAKE_BASE_ADDR + SPU_LS_SIZE * (cpu_thread::id & 0xffffff), SPU_LS_SIZE, &shm); + // 0x1000 indicates falloc to allocate page with no access rights in base memory + vm::get(vm::spu)->falloc(SPU_FAKE_BASE_ADDR + SPU_LS_SIZE * (cpu_thread::id & 0xffffff), SPU_LS_SIZE, &shm, 0x1000); } vm::writer_lock(0); diff --git a/rpcs3/Emu/Memory/vm.cpp b/rpcs3/Emu/Memory/vm.cpp index 8898982bad..68bcf6ff78 100644 --- a/rpcs3/Emu/Memory/vm.cpp +++ b/rpcs3/Emu/Memory/vm.cpp @@ -1173,7 +1173,7 @@ namespace vm return 0; } - u8 pflags = page_readable | page_writable; + u8 pflags = flags & 0x1000 ? 0 : page_readable | page_writable; if ((flags & SYS_MEMORY_PAGE_SIZE_64K) == SYS_MEMORY_PAGE_SIZE_64K) { @@ -1230,7 +1230,7 @@ namespace vm return 0; } - u8 pflags = page_readable | page_writable; + u8 pflags = flags & 0x1000 ? 0 : page_readable | page_writable; if ((flags & SYS_MEMORY_PAGE_SIZE_64K) == SYS_MEMORY_PAGE_SIZE_64K) {