From cc57945280ca690b8b24cb375e3cda0c58402999 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Wed, 29 Jul 2026 16:27:51 +0200 Subject: [PATCH] Made the threads/mbx/refer/refer test not crash --- Core/HLE/sceKernelMbx.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Core/HLE/sceKernelMbx.cpp b/Core/HLE/sceKernelMbx.cpp index d72d72b6a3..fdb53a693f 100644 --- a/Core/HLE/sceKernelMbx.cpp +++ b/Core/HLE/sceKernelMbx.cpp @@ -565,8 +565,13 @@ int sceKernelReferMbxStatus(SceUID id, u32 infoAddr) { if (!info.IsValid()) return hleLogError(Log::sceKernel, -1, "invalid pointer"); - for (int i = 0, n = m->nmb.numMessages; i < n; ++i) - m->nmb.packetListHead = Memory::Read_U32(m->nmb.packetListHead); + u32 packet = m->nmb.packetListHead; + for (int i = 0, n = m->nmb.numMessages; i < n; ++i) { + if (packet == 0 || !Memory::IsValidAddress(packet)) { + return hleLogError(Log::sceKernel, -1, "invalid packet list head"); + } + packet = Memory::ReadUnchecked_U32(packet); + } HLEKernel::CleanupWaitingThreads(WAITTYPE_MBX, id, m->waitingThreads);