From eb5f3f67f62534126e9598e9ea3e165238590b93 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 12 Dec 2018 13:26:33 -0500 Subject: vm_manager: Amend the returned values for invalid memory queries in QueryMemory() The kernel returns a memory info instance with the base address set to the end of the address space, and the size of said block as 0 - address_space_end, it doesn't set both of said members to zero. --- src/core/hle/kernel/vm_manager.cpp | 8 ++++---- src/core/hle/kernel/vm_manager.h | 3 +++ 2 files changed, 7 insertions(+), 4 deletions(-) (limited to 'src/core/hle/kernel') diff --git a/src/core/hle/kernel/vm_manager.cpp b/src/core/hle/kernel/vm_manager.cpp index 21bcee192..d3b55a51e 100644 --- a/src/core/hle/kernel/vm_manager.cpp +++ b/src/core/hle/kernel/vm_manager.cpp @@ -28,7 +28,7 @@ static const char* GetMemoryStateName(MemoryState state) { "IpcBuffer0", "Stack", "ThreadLocal", "TransferMemoryIsolated", "TransferMemory", "ProcessMemory", - "Unknown2", "IpcBuffer1", + "Inaccessible", "IpcBuffer1", "IpcBuffer3", "KernelStack", }; @@ -312,10 +312,10 @@ MemoryInfo VMManager::QueryMemory(VAddr address) const { memory_info.size = vma->second.size; memory_info.state = ToSvcMemoryState(vma->second.meminfo_state); } else { - memory_info.base_address = 0; + memory_info.base_address = address_space_end; memory_info.permission = static_cast(VMAPermission::None); - memory_info.size = 0; - memory_info.state = static_cast(MemoryState::Unmapped); + memory_info.size = 0 - address_space_end; + memory_info.state = static_cast(MemoryState::Inaccessible); } return memory_info; diff --git a/src/core/hle/kernel/vm_manager.h b/src/core/hle/kernel/vm_manager.h index 91e8e8c8c..7befa3526 100644 --- a/src/core/hle/kernel/vm_manager.h +++ b/src/core/hle/kernel/vm_manager.h @@ -105,6 +105,9 @@ enum class MemoryState : u32 { ProcessMemory = 0x0F | FlagIPC3 | FlagIPC1 | FlagMapped | FlagMemoryPoolAllocated, + // Used to signify an inaccessible or invalid memory region with memory queries + Inaccessible = 0x10, + IpcBuffer1 = 0x11 | FlagIPC3 | FlagIPC1 | FlagMapped | FlagQueryPhysicalAddressAllowed | FlagSharedDevice | FlagSharedDeviceAligned | FlagMemoryPoolAllocated, -- cgit v1.2.3