From 09f71a8ecb53a9e003af994b28c1bb0ad6c2bd11 Mon Sep 17 00:00:00 2001 From: elad335 <18193363+elad335@users.noreply.github.com> Date: Tue, 29 Apr 2025 14:26:46 +0300 Subject: [PATCH] vm_native.cpp: Fix possible weakness of map_self() --- rpcs3/util/vm_native.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/rpcs3/util/vm_native.cpp b/rpcs3/util/vm_native.cpp index 8dd069d553..156af86548 100644 --- a/rpcs3/util/vm_native.cpp +++ b/rpcs3/util/vm_native.cpp @@ -969,20 +969,24 @@ namespace utils { void* ptr = m_ptr; - while (!ptr) + for (void* mapped = nullptr; !ptr;) { - const auto mapped = this->map(nullptr, prot); + if (!mapped) + { + mapped = this->map(nullptr, prot); + } // Install mapped memory - if (!m_ptr.compare_exchange(ptr, mapped)) - { - // Mapped already, nothing to do. - this->unmap(mapped); - } - else + if (m_ptr.compare_exchange(ptr, mapped)) { ptr = mapped; } + else if (ptr) + { + // Mapped already, nothing to do. + ensure(ptr != mapped); + this->unmap(mapped); + } } return static_cast(ptr);