Просмотр исходного кода

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.
Lioncash 7 лет назад
Родитель
Сommit
eb5f3f67f6
2 измененных файлов с 7 добавлено и 4 удалено
  1. 4 4
      src/core/hle/kernel/vm_manager.cpp
  2. 3 0
      src/core/hle/kernel/vm_manager.h

+ 4 - 4
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<u32>(VMAPermission::None);
-        memory_info.size = 0;
-        memory_info.state = static_cast<u32>(MemoryState::Unmapped);
+        memory_info.size = 0 - address_space_end;
+        memory_info.state = static_cast<u32>(MemoryState::Inaccessible);
     }
 
     return memory_info;

+ 3 - 0
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,