[rtems-tools commit] TraceWriterQEMU.cc: Multiple clean ups

Joel Sherrill joel at rtems.org
Tue Apr 13 18:54:34 UTC 2021


Module:    rtems-tools
Branch:    master
Commit:    177c7520f45ec474387dced653395f37c1430bb1
Changeset: http://git.rtems.org/rtems-tools/commit/?id=177c7520f45ec474387dced653395f37c1430bb1

Author:    Joel Sherrill <joel at rtems.org>
Date:      Sat Apr 10 20:08:20 2021 -0500

TraceWriterQEMU.cc: Multiple clean ups

Change sprintf() to strncpy() to avoid buffer overwrite CID 1399603,
Switch to auto pointer for iterator.
Initialize _pad field of entry CID 1399603,
fclose file on error patch CID 1399621,

---

 tester/covoar/TraceWriterQEMU.cc | 25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)

diff --git a/tester/covoar/TraceWriterQEMU.cc b/tester/covoar/TraceWriterQEMU.cc
index cd325b6..4bc9667 100644
--- a/tester/covoar/TraceWriterQEMU.cc
+++ b/tester/covoar/TraceWriterQEMU.cc
@@ -34,9 +34,8 @@
  *  reading the QEMU coverage data files.
  */
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/stat.h>
+#include <cstring>
+#include <cstdio>
 
 #include <iostream>
 #include <iomanip>
@@ -107,7 +106,7 @@ namespace Trace {
     //
     //  Write the Header to the file
     //
-    sprintf( header.magic, "%s", QEMU_TRACE_MAGIC );
+    strncpy( header.magic, QEMU_TRACE_MAGIC, sizeof(header.magic) );
     header.version = QEMU_TRACE_VERSION;
     header.kind    = QEMU_TRACE_KIND_RAW;  // XXX ??
     header.sizeof_target_pc = 32;
@@ -135,14 +134,15 @@ namespace Trace {
     //
     // Loop through log and write each entry.
     //
-    struct trace_entry32  entry;
-    TraceList::ranges_t::iterator   itr;
-
-    for (itr = log->Trace.set.begin(); (itr != log->Trace.set.end()); itr++ ){
-      entry.pc   = itr->lowAddress;
-      entry.size = itr-> length;
-      entry.op   = TRACE_OP_BLOCK;
-      switch (itr->exitReason) {
+
+    for (const auto & itr : log->Trace.set) {
+      struct trace_entry32  entry;
+
+      entry._pad[0] = 0;
+      entry.pc      = itr.lowAddress;
+      entry.size    = itr.length;
+      entry.op      = TRACE_OP_BLOCK;
+      switch (itr.exitReason) {
         case TraceList::EXIT_REASON_BRANCH_TAKEN:
           entry.op |= taken;
           break;
@@ -164,6 +164,7 @@ namespace Trace {
 
       status = ::fwrite( &entry, sizeof(entry), 1, traceFile );
       if (status != 1) {
+        ::fclose( traceFile );
         std::cerr << "Unable to write entry to " << file << std::endl;
         return false;
       }



More information about the vc mailing list