Browse Source

Kernel: Zero-fill shared memory blocks when mapping

This works around crashes related to GSP/HID/etc. shared memory blocks
having garbage values. The proper fix requires proper management of
mapped memory blocks in the process.
Yuri Kunde Schlesner 11 năm trước cách đây
mục cha
commit
774eea8374
1 tập tin đã thay đổi với 8 bổ sung0 xóa
  1. 8 0
      src/core/hle/kernel/shared_memory.cpp

+ 8 - 0
src/core/hle/kernel/shared_memory.cpp

@@ -2,6 +2,8 @@
 // Licensed under GPLv2 or any later version
 // Refer to the license.txt file included.
 
+#include <cstring>
+
 #include "common/logging/log.h"
 
 #include "core/mem_map.h"
@@ -38,6 +40,12 @@ ResultCode SharedMemory::Map(VAddr address, MemoryPermission permissions,
 
     // TODO: Test permissions
 
+    // HACK: Since there's no way to write to the memory block without mapping it onto the game
+    // process yet, at least initialize memory the first time it's mapped.
+    if (address != this->base_address) {
+        std::memset(Memory::GetPointer(address), 0, size);
+    }
+
     this->base_address = address;
 
     return RESULT_SUCCESS;