From 2eb4aeea2cfb301d4008bb19421efad1ba039623 Mon Sep 17 00:00:00 2001 From: zhangzhuozhou Date: Fri, 3 Jan 2025 11:04:44 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=E6=BC=8F=E6=B4=9E18=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhangzhuozhou --- trace_streamer/src/parser/rawtrace_parser/rawtrace_parser.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/trace_streamer/src/parser/rawtrace_parser/rawtrace_parser.cpp b/trace_streamer/src/parser/rawtrace_parser/rawtrace_parser.cpp index bc7e3cf03..496480eb8 100644 --- a/trace_streamer/src/parser/rawtrace_parser/rawtrace_parser.cpp +++ b/trace_streamer/src/parser/rawtrace_parser/rawtrace_parser.cpp @@ -286,8 +286,8 @@ bool RawTraceParser::ParseDataRecursively(std::deque::iterator &package packagesCurIter += sizeof(type); std::copy(packagesCurIter, packagesCurIter + sizeof(len), reinterpret_cast(&len)); packagesCurIter += sizeof(len); - uint32_t restDataLen = std::distance(packagesCurIter, packagesBuffer_.end()); - TS_CHECK_TRUE_RET(len <= restDataLen && packagesBuffer_.size() > 0, false); + int32_t restDataLen = std::distance(packagesCurIter, packagesBuffer_.end()); + TS_CHECK_TRUE_RET(restDataLen >= 0 && len <= restDataLen && packagesBuffer_.size() > 0, false); std::string bufferLine(packagesCurIter, packagesCurIter + len); packagesCurIter += len; packagesCurIter = packagesBuffer_.erase(packagesBuffer_.begin(), packagesCurIter); -- Gitee From b1497109240acce4ed8ab20e4cce5de7b050b52f Mon Sep 17 00:00:00 2001 From: zhangzhuozhou Date: Fri, 3 Jan 2025 11:14:59 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix:=E6=BC=8F=E6=B4=9E20=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhangzhuozhou --- .../src/parser/rawtrace_parser/ftrace_processor.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/trace_streamer/src/parser/rawtrace_parser/ftrace_processor.cpp b/trace_streamer/src/parser/rawtrace_parser/ftrace_processor.cpp index 8e70920a2..644f3c0cd 100644 --- a/trace_streamer/src/parser/rawtrace_parser/ftrace_processor.cpp +++ b/trace_streamer/src/parser/rawtrace_parser/ftrace_processor.cpp @@ -175,7 +175,10 @@ static std::string GetName(const std::map &nameMap, int type) static std::string GetFieldTypeName(EventFieldType type) { static std::map toNames = { -#define VALUE_NAME(x) {x, #x} +#define VALUE_NAME(x) \ + { \ + x, #x \ + } VALUE_NAME(FIELD_TYPE_INVALID), VALUE_NAME(FIELD_TYPE_BOOL), VALUE_NAME(FIELD_TYPE_INT8), VALUE_NAME(FIELD_TYPE_UINT8), VALUE_NAME(FIELD_TYPE_INT16), VALUE_NAME(FIELD_TYPE_UINT16), VALUE_NAME(FIELD_TYPE_INT32), VALUE_NAME(FIELD_TYPE_UINT32), VALUE_NAME(FIELD_TYPE_INT64), @@ -192,7 +195,10 @@ static std::string GetFieldTypeName(EventFieldType type) static std::string GetProtoTypeName(ProtoFieldType type) { static std::map toNames = { -#define VALUE_NAME(x) {x, #x} +#define VALUE_NAME(x) \ + { \ + x, #x \ + } VALUE_NAME(PROTO_TYPE_UNKNOWN), VALUE_NAME(PROTO_TYPE_DOUBLE), VALUE_NAME(PROTO_TYPE_FLOAT), VALUE_NAME(PROTO_TYPE_INT64), VALUE_NAME(PROTO_TYPE_UINT64), VALUE_NAME(PROTO_TYPE_INT32), VALUE_NAME(PROTO_TYPE_FIXED64), VALUE_NAME(PROTO_TYPE_FIXED32), VALUE_NAME(PROTO_TYPE_BOOL), @@ -611,6 +617,9 @@ bool FtraceProcessor::HandlePage(FtraceCpuDetailMsg &cpuMsg, cpuMsg.set_overwrite(curPageHeader_.overwrite); curTimestamp_ = curPageHeader_.timestamp; endPosOfData_ = curPageHeader_.endpos; + if (endPosOfData_ > endPosOfPage_) { + return false; + } while (curPos_ < curPageHeader_.endpos) { FtraceEventHeader eventHeader = {}; TS_CHECK_TRUE(ReadInfo(&curPos_, endPosOfData_, &eventHeader, sizeof(FtraceEventHeader)), false, -- Gitee From db681b4ba7316ea6a2e2c810fb516ac08b3a137b Mon Sep 17 00:00:00 2001 From: zhangzhuozhou Date: Fri, 3 Jan 2025 14:35:21 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix=E6=BC=8F=E6=B4=9E21=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhangzhuozhou --- .../src/parser/rawtrace_parser/ftrace_processor.cpp | 13 +++++-------- .../src/parser/rawtrace_parser/ftrace_processor.h | 2 ++ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/trace_streamer/src/parser/rawtrace_parser/ftrace_processor.cpp b/trace_streamer/src/parser/rawtrace_parser/ftrace_processor.cpp index 644f3c0cd..5b3045f14 100644 --- a/trace_streamer/src/parser/rawtrace_parser/ftrace_processor.cpp +++ b/trace_streamer/src/parser/rawtrace_parser/ftrace_processor.cpp @@ -175,10 +175,7 @@ static std::string GetName(const std::map &nameMap, int type) static std::string GetFieldTypeName(EventFieldType type) { static std::map toNames = { -#define VALUE_NAME(x) \ - { \ - x, #x \ - } +#define VALUE_NAME(x) {x, #x} VALUE_NAME(FIELD_TYPE_INVALID), VALUE_NAME(FIELD_TYPE_BOOL), VALUE_NAME(FIELD_TYPE_INT8), VALUE_NAME(FIELD_TYPE_UINT8), VALUE_NAME(FIELD_TYPE_INT16), VALUE_NAME(FIELD_TYPE_UINT16), VALUE_NAME(FIELD_TYPE_INT32), VALUE_NAME(FIELD_TYPE_UINT32), VALUE_NAME(FIELD_TYPE_INT64), @@ -195,10 +192,7 @@ static std::string GetFieldTypeName(EventFieldType type) static std::string GetProtoTypeName(ProtoFieldType type) { static std::map toNames = { -#define VALUE_NAME(x) \ - { \ - x, #x \ - } +#define VALUE_NAME(x) {x, #x} VALUE_NAME(PROTO_TYPE_UNKNOWN), VALUE_NAME(PROTO_TYPE_DOUBLE), VALUE_NAME(PROTO_TYPE_FLOAT), VALUE_NAME(PROTO_TYPE_INT64), VALUE_NAME(PROTO_TYPE_UINT64), VALUE_NAME(PROTO_TYPE_INT32), VALUE_NAME(PROTO_TYPE_FIXED64), VALUE_NAME(PROTO_TYPE_FIXED32), VALUE_NAME(PROTO_TYPE_BOOL), @@ -668,6 +662,9 @@ void FtraceProcessor::HmProcessPageTraceDataEvents(RmqConsumerData *rmqData, EventFormat format = {}; auto curPtr = rmqData->data; auto endPtr = rmqData->data + rmqData->length; + if (rmqData->length > DATA_SIZE) { + return; + } while (curPtr < endPtr) { event = (struct RmqEntry *)curPtr; auto evtSize = event->size; diff --git a/trace_streamer/src/parser/rawtrace_parser/ftrace_processor.h b/trace_streamer/src/parser/rawtrace_parser/ftrace_processor.h index f5d059994..3ea9aff77 100644 --- a/trace_streamer/src/parser/rawtrace_parser/ftrace_processor.h +++ b/trace_streamer/src/parser/rawtrace_parser/ftrace_processor.h @@ -29,6 +29,8 @@ namespace SysTuning { namespace TraceStreamer { using namespace SysTuning::base; constexpr uint32_t FTRACE_PAGE_SIZE = 4096; +// DATA_SIZE = FTRACE_PAGE_SIZE - RmqConsumerData.timestamp-RmqConsumerData.length-RmqConsumerData.coreId所占的长度 +constexpr uint32_t DATA_SIZE = 4079; constexpr uint32_t RMQ_ENTRY_ALIGN_MASK = (1 << 2) - 1; class FtraceProcessor { public: -- Gitee