From de7cdadc89a1d067bb3f6c34ac42c244fa8c7ac4 Mon Sep 17 00:00:00 2001 From: Megh Bhatt Date: Thu, 28 Jul 2016 16:37:22 -0700 Subject: [PATCH] Prevent access after free of trace messages Add a GetNextSeqNum() function and call it to set the sequence number in the trace message before calling TraceWrite(). Change-Id: I232e1134f711f534c166c18357986b8d1e692d15 Closes-Bug: #1602899 --- compiler/generate/t_cpp_generator.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compiler/generate/t_cpp_generator.cc b/compiler/generate/t_cpp_generator.cc index d4b147b5..a1bfd909 100755 --- a/compiler/generate/t_cpp_generator.cc +++ b/compiler/generate/t_cpp_generator.cc @@ -4714,8 +4714,9 @@ void t_cpp_generator::generate_sandesh_trace(ofstream& out, generate_sandesh_no_static_const_string_function(tsandesh, false, false, false, false, true) << ";" << endl; out << indent() << creator_name << "->set_category(trace_buf->Name());" << endl; - out << indent() << "uint32_t seqnum = trace_buf->TraceWrite(" << creator_name << ");" << endl; + out << indent() << "uint32_t seqnum(trace_buf->GetNextSeqNum());" << endl; out << indent() << creator_name << "->set_seqnum(seqnum);" << endl; + out << indent() << "trace_buf->TraceWrite(" << creator_name << ");" << endl; out << indent() << "if ((IsLocalLoggingEnabled() && IsTracePrintEnabled()) || IsUnitTest()) " << creator_name << "->Log();" << endl; indent_down(); out << indent() << "}" <