From be1994f1097b246a7eaa073fc0bf4474bc5f292e Mon Sep 17 00:00:00 2001 From: Daniel R <47796739+polybiusproxy@users.noreply.github.com> Date: Sat, 24 Aug 2024 22:16:08 +0200 Subject: [PATCH] core/kernel: Fix returns on `sceKernelAvailableDirectMemorySize` --- src/core/libraries/kernel/memory_management.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/core/libraries/kernel/memory_management.cpp b/src/core/libraries/kernel/memory_management.cpp index 47471a34..fbc45795 100644 --- a/src/core/libraries/kernel/memory_management.cpp +++ b/src/core/libraries/kernel/memory_management.cpp @@ -75,28 +75,26 @@ s32 PS4_SYSV_ABI sceKernelAvailableDirectMemorySize(u64 searchStart, u64 searchE LOG_WARNING(Kernel_Vmm, "called searchStart = {:#x}, searchEnd = {:#x}, alignment = {:#x}", searchStart, searchEnd, alignment); - if (searchEnd <= searchStart) { + if (physAddrOut == nullptr || sizeOut == nullptr) { return ORBIS_KERNEL_ERROR_EINVAL; } if (searchEnd > SCE_KERNEL_MAIN_DMEM_SIZE) { return ORBIS_KERNEL_ERROR_EINVAL; } - - if (physAddrOut == nullptr || sizeOut == nullptr) { - return ORBIS_KERNEL_ERROR_EINVAL; + if (searchEnd <= searchStart) { + return ORBIS_KERNEL_ERROR_ENOMEM; } auto* memory = Core::Memory::Instance(); - PAddr physAddr; - size_t size; - s32 result = - memory->DirectQueryAvailable(searchStart, searchEnd, alignment, &physAddr, &size); + PAddr physAddr{}; + size_t size{}; + s32 result = memory->DirectQueryAvailable(searchStart, searchEnd, alignment, &physAddr, &size); if (size == 0) { return ORBIS_KERNEL_ERROR_ENOMEM; } - + *physAddrOut = static_cast(physAddr); *sizeOut = size;