Only mark checksummed memory as initialized for MSAN.
authoryangguo <yangguo@chromium.org>
Tue, 9 Jun 2015 07:49:36 +0000 (00:49 -0700)
committerCommit bot <commit-bot@chromium.org>
Tue, 9 Jun 2015 07:49:48 +0000 (07:49 +0000)
BUG=425187
LOG=N

Review URL: https://codereview.chromium.org/1170723003

Cr-Commit-Position: refs/heads/master@{#28854}

src/snapshot/serialize.cc

index 4be1da2c9a346f6f6f8d5acbb64837e227efe055..ace8225b8246caf958f3bf335b2c33c423e19576 100644 (file)
@@ -2128,10 +2128,6 @@ int Serializer::ObjectSerializer::OutputRawData(
     if (is_code_object_) object_start = PrepareCode();
 
     const char* description = is_code_object_ ? "Code" : "Byte";
-#ifdef MEMORY_SANITIZER
-    // Object sizes are usually rounded up with uninitialized padding space.
-    MSAN_MEMORY_IS_INITIALIZED(object_start + base, bytes_to_output);
-#endif  // MEMORY_SANITIZER
     sink_->PutRaw(object_start + base, bytes_to_output, description);
   }
   if (to_skip != 0 && return_skip == kIgnoringReturn) {
@@ -2518,6 +2514,11 @@ Vector<const byte> SnapshotData::Payload() const {
 class Checksum {
  public:
   explicit Checksum(Vector<const byte> payload) {
+#ifdef MEMORY_SANITIZER
+    // Computing the checksum includes padding bytes for objects like strings.
+    // Mark every object as initialized in the code serializer.
+    MSAN_MEMORY_IS_INITIALIZED(payload.start(), payload.length());
+#endif  // MEMORY_SANITIZER
     // Fletcher's checksum. Modified to reduce 64-bit sums to 32-bit.
     uintptr_t a = 1;
     uintptr_t b = 0;