Check for valid pointers to extended memory

This commit is contained in:
Daniel R. 2024-12-26 18:50:22 +01:00
parent b443bec7d9
commit 6f8b6f50db
No known key found for this signature in database
GPG key ID: B8ADC8F57BA18DBA
2 changed files with 9 additions and 1 deletions

View file

@ -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;

View file

@ -24,6 +24,7 @@ struct OrbisKernelMemParam {
u8* extended_memory_2;
u64* exnteded_cpu_page_table;
};
static_assert(sizeof(OrbisKernelMemParam) == 0x38);
struct OrbisProcParam {
u64 size;