syscall_emul: fix bug in aux vector initialization
authorSteve Reinhardt <steve.reinhardt@amd.com>
Sun, 7 Feb 2016 01:21:20 +0000 (17:21 -0800)
committerSteve Reinhardt <steve.reinhardt@amd.com>
Sun, 7 Feb 2016 01:21:20 +0000 (17:21 -0800)
Writing 16 bytes from an 8-byte source value is a bad idea.
This doesn't appear to have broken anything, but showed up
as spurious differences when tracediffing runs.

src/arch/x86/process.cc

index 8d1e1da96eb34ceb23a47c6e69f8911356973a7f..82a23027dd1397ac364497015fe37612f530c635 100644 (file)
@@ -983,8 +983,10 @@ X86LiveProcess::argsInit(int pageSize,
     }
     //Write out the terminating zeroed auxilliary vector
     const uint64_t zero = 0;
-    initVirtMem.writeBlob(auxv_array_base + 2 * intSize * auxv.size(),
-            (uint8_t*)&zero, 2 * intSize);
+    initVirtMem.writeBlob(auxv_array_base + auxv.size() * 2 * intSize,
+                          (uint8_t*)&zero, intSize);
+    initVirtMem.writeBlob(auxv_array_base + (auxv.size() * 2 + 1) * intSize,
+                          (uint8_t*)&zero, intSize);
 
     initVirtMem.writeString(aux_data_base, platform.c_str());