diff --git a/src/Reactor/ExecutableMemory.cpp b/src/Reactor/ExecutableMemory.cpp
index bc01045..d35f3d5 100644
--- a/src/Reactor/ExecutableMemory.cpp
+++ b/src/Reactor/ExecutableMemory.cpp
@@ -49,12 +49,18 @@
 #define STRINGIFY(x) #x
 #define MACRO_STRINGIFY(x) STRINGIFY(x)
 
+// A Clang extension to determine compiler features.
+// We use it to detect Sanitizer builds (e.g. -fsanitize=memory).
+#ifndef __has_feature
+#	define __has_feature(x) 0
+#endif
+
 namespace rr {
 namespace {
 
 struct Allocation
 {
-	//	size_t bytes;
+	// size_t bytes;
 	unsigned char *block;
 };
 
@@ -87,7 +93,7 @@
 		aligned = (unsigned char *)((uintptr_t)(block + sizeof(Allocation) + alignment - 1) & -(intptr_t)alignment);
 		Allocation *allocation = (Allocation *)(aligned - sizeof(Allocation));
 
-		//	allocation->bytes = bytes;
+		// allocation->bytes = bytes;
 		allocation->block = block;
 	}
 
@@ -231,7 +237,10 @@
 {
 	void *memory = allocateRaw(bytes, alignment);
 
-	if(memory)
+	// Zero-initialize the memory, for security reasons.
+	// MemorySanitizer builds skip this so that we can detect when we
+	// inadvertently rely on this, which would indicate a bug.
+	if(memory && !__has_feature(memory_sanitizer))
 	{
 		memset(memory, 0, bytes);
 	}
diff --git a/src/System/Memory.cpp b/src/System/Memory.cpp
index 773b362..6c0d300 100644
--- a/src/System/Memory.cpp
+++ b/src/System/Memory.cpp
@@ -40,35 +40,22 @@
 #	define __x86__
 #endif
 
+// A Clang extension to determine compiler features.
+// We use it to detect Sanitizer builds (e.g. -fsanitize=memory).
+#ifndef __has_feature
+#	define __has_feature(x) 0
+#endif
+
 namespace sw {
 
 namespace {
 
 struct Allocation
 {
-	//	size_t bytes;
+	// size_t bytes;
 	unsigned char *block;
 };
 
-void *allocateRaw(size_t bytes, size_t alignment)
-{
-	ASSERT((alignment & (alignment - 1)) == 0);  // Power of 2 alignment.
-
-	unsigned char *block = (unsigned char *)malloc(bytes + sizeof(Allocation) + alignment);
-	unsigned char *aligned = nullptr;
-
-	if(block)
-	{
-		aligned = (unsigned char *)((uintptr_t)(block + sizeof(Allocation) + alignment - 1) & -(intptr_t)alignment);
-		Allocation *allocation = (Allocation *)(aligned - sizeof(Allocation));
-
-		//	allocation->bytes = bytes;
-		allocation->block = block;
-	}
-
-	return aligned;
-}
-
 }  // anonymous namespace
 
 size_t memoryPageSize()
@@ -88,14 +75,28 @@
 
 void *allocate(size_t bytes, size_t alignment)
 {
-	void *memory = allocateRaw(bytes, alignment);
+	ASSERT((alignment & (alignment - 1)) == 0);  // Power of 2 alignment.
 
-	if(memory)
+	size_t size = bytes + sizeof(Allocation) + alignment;
+	unsigned char *block = (unsigned char *)malloc(size);
+	unsigned char *aligned = nullptr;
+
+	if(block)
 	{
-		memset(memory, 0, bytes);
+		// TODO(b/140991626): Never initialize the allocated memory.
+		if(!__has_feature(memory_sanitizer))
+		{
+			memset(block, 0, size);
+		}
+
+		aligned = (unsigned char *)((uintptr_t)(block + sizeof(Allocation) + alignment - 1) & -(intptr_t)alignment);
+		Allocation *allocation = (Allocation *)(aligned - sizeof(Allocation));
+
+		// allocation->bytes = bytes;
+		allocation->block = block;
 	}
 
-	return memory;
+	return aligned;
 }
 
 void deallocate(void *memory)
diff --git a/tests/VulkanUnitTests/ComputeTests.cpp b/tests/VulkanUnitTests/ComputeTests.cpp
index 9d94987..d84df6f 100644
--- a/tests/VulkanUnitTests/ComputeTests.cpp
+++ b/tests/VulkanUnitTests/ComputeTests.cpp
@@ -185,6 +185,8 @@
 	uint32_t *buffers;
 	VK_ASSERT(device->MapMemory(memory, 0, buffersSize, 0, (void **)&buffers));
 
+	memset(buffers, 0, buffersSize);
+
 	buffers[magic0Offset] = magic0;
 	buffers[magic1Offset] = magic1;
 	buffers[magic2Offset] = magic2;
