diff --git a/Core/HLE/sceKernelModule.cpp b/Core/HLE/sceKernelModule.cpp index 7687c230b3..7c1af5a784 100644 --- a/Core/HLE/sceKernelModule.cpp +++ b/Core/HLE/sceKernelModule.cpp @@ -1478,9 +1478,14 @@ bool __KernelLoadExec(const char *filename, u32 paramPtr, std::string *error_str { u32 error; while (!loadedModules.empty()) { - Module *module = kernelObjects.Get(*loadedModules.begin(), error); + SceUID moduleID = *loadedModules.begin(); + Module *module = kernelObjects.Get(moduleID, error); if (module) { module->Cleanup(); + } else { + // An invalid module. We need to remove it or we'll loop forever. + WARN_LOG(LOADER, "Invalid module still marked as loaded on loadexec"); + loadedModules.erase(moduleID); } }