diff --git a/src/core/linker.cpp b/src/core/linker.cpp index 47a720f8b..d1d1bdefa 100644 --- a/src/core/linker.cpp +++ b/src/core/linker.cpp @@ -71,7 +71,7 @@ void Linker::Execute() { bool use_extended_mem1 = true, use_extended_mem2 = true; const auto* proc_param = GetProcParam(); - ASSERT_MSG(proc_param); + ASSERT(proc_param); Core::OrbisKernelMemParam mem_param{}; if (proc_param->size >= offsetof(OrbisProcParam, mem_param) + sizeof(OrbisKernelMemParam*)) { @@ -86,6 +86,13 @@ void Linker::Execute() { } } + if (mem_param.size < offsetof(OrbisKernelMemParam, extended_memory_1) + sizeof(u64*)) { + mem_param.extended_memory_1 = nullptr; + } + if (mem_param.size < offsetof(OrbisKernelMemParam, extended_memory_2) + sizeof(u64*)) { + mem_param.extended_memory_2 = nullptr; + } + const u64 fw_ver = Common::ElfInfo::Instance().RawFirmwareVer(); if (fw_ver < Common::ElfInfo::FW_50) { use_extended_mem1 = mem_param.extended_memory_1 ? *mem_param.extended_memory_1 : false; diff --git a/src/core/linker.h b/src/core/linker.h index d6b5d648a..245bdf406 100644 --- a/src/core/linker.h +++ b/src/core/linker.h @@ -24,6 +24,7 @@ struct OrbisKernelMemParam { u8* extended_memory_2; u64* exnteded_cpu_page_table; }; +static_assert(sizeof(OrbisKernelMemParam) == 0x38); struct OrbisProcParam { u64 size;