From 71d1a4527d016a2711e4e5d37e4d273832ec5d1b Mon Sep 17 00:00:00 2001 From: Megamouse Date: Thu, 1 Oct 2026 08:53:00 +0200 Subject: [PATCH] _sys_ppu_thread_create: fix memory leak on error --- rpcs3/Emu/Cell/lv2/sys_ppu_thread.cpp | 1 + rpcs3/Emu/Cell/lv2/sys_prx.cpp | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/Cell/lv2/sys_ppu_thread.cpp b/rpcs3/Emu/Cell/lv2/sys_ppu_thread.cpp index 0504b9885e..e5c556d3b5 100644 --- a/rpcs3/Emu/Cell/lv2/sys_ppu_thread.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_ppu_thread.cpp @@ -526,6 +526,7 @@ error_code _sys_ppu_thread_create(ppu_thread& ppu, vm::ptr thread_id, vm::p if (!vm::read_string(threadname.addr(), max_size, ppu_name, true)) { + vm::dealloc(stack_base); dct.free(stack_size); return CELL_EFAULT; } diff --git a/rpcs3/Emu/Cell/lv2/sys_prx.cpp b/rpcs3/Emu/Cell/lv2/sys_prx.cpp index 8e1bf0c695..1ea92810aa 100644 --- a/rpcs3/Emu/Cell/lv2/sys_prx.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_prx.cpp @@ -365,6 +365,8 @@ std::function lv2_prx::load(utils::serial& ar) u128 klic = g_fxo->get().last_key(); file = make_file_view(std::move(file), offset, umax); prx = ppu_load_prx(ppu_prx_object{decrypt_self(std::move(file), reinterpret_cast(&klic))}, false, path, offset, &ar); + ensure(prx); + prx->m_loaded_flags = std::move(loaded_flags); prx->m_external_loaded_flags = std::move(external_flags); @@ -372,8 +374,6 @@ std::function lv2_prx::load(utils::serial& ar) { prx->restore_exports(); } - - ensure(prx); } else {