Browse Source

UserspaceEmulator: Mark mmap and shbuf regions as initialized up front

A lot of software relies on the fact that mmap and shbuf memory is
zeroed out by the kernel, so we should consider it initialized from the
shadow bit perspective as well.
Andreas Kling 5 years ago
parent
commit
2a2e76c802

+ 3 - 1
DevTools/UserspaceEmulator/MmapRegion.cpp

@@ -26,6 +26,7 @@
 
 #include "MmapRegion.h"
 #include "Emulator.h"
+#include <string.h>
 #include <sys/mman.h>
 
 namespace UserspaceEmulator {
@@ -51,7 +52,8 @@ MmapRegion::MmapRegion(u32 base, u32 size, int prot)
     : Region(base, size)
     , m_prot(prot)
 {
-    m_shadow_data = (u8*)calloc(1, size);
+    m_shadow_data = (u8*)malloc(size);
+    memset(m_shadow_data, 1, size);
 }
 
 MmapRegion::~MmapRegion()

+ 3 - 1
DevTools/UserspaceEmulator/SharedBufferRegion.cpp

@@ -28,6 +28,7 @@
 #include "Emulator.h"
 #include <Kernel/API/Syscall.h>
 #include <serenity.h>
+#include <string.h>
 #include <sys/mman.h>
 
 namespace UserspaceEmulator {
@@ -42,7 +43,8 @@ SharedBufferRegion::SharedBufferRegion(u32 base, u32 size, int shbuf_id, u8* hos
     , m_data(host_data)
     , m_shbuf_id(shbuf_id)
 {
-    m_shadow_data = (u8*)calloc(1, size);
+    m_shadow_data = (u8*)malloc(size);
+    memset(m_shadow_data, 1, size);
 }
 
 SharedBufferRegion::~SharedBufferRegion()