Skip to content

Commit 94ce5fb

Browse files
authored
EDGEML-12485 fix (#9546) (#9549)
Signed-off-by: Akshay Tondak <aktondak@amd.com>
1 parent a5ccf18 commit 94ce5fb

1 file changed

Lines changed: 32 additions & 11 deletions

File tree

src/runtime_src/core/tools/xbutil2/FirmwareLogging/FirmwareLog.cpp

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -350,25 +350,46 @@ parse(const uint8_t* data_ptr, size_t buf_size) const
350350
{
351351
std::string result;
352352

353+
constexpr uint8_t MAGIC_HEADER = 0xCA;
354+
constexpr uint8_t MAGIC_FOOTER = 0xBA;
355+
constexpr size_t SCAN_STEP = 4; // Minimum alignment step for searching
356+
353357
size_t offset = 0;
354-
size_t entry_header_size = m_config.get_entry_header_size();
355-
size_t entry_footer_size = m_config.get_entry_footer_size();
356-
size_t total_entry_size = entry_header_size + m_message_size + entry_footer_size;
358+
const size_t entry_header_size = m_config.get_entry_header_size();
359+
const size_t entry_footer_size = m_config.get_entry_footer_size();
360+
const size_t min_entry_size = entry_header_size + m_message_size + entry_footer_size;
357361

358-
while (offset + total_entry_size <= buf_size) {
359-
// Skip entry header
360-
size_t msg_offset = offset + entry_header_size;
362+
// Search for valid entries by looking for the header magic byte
363+
while (offset + min_entry_size <= buf_size) {
364+
// Look for header magic byte (0xCA)
365+
if (data_ptr[offset] != MAGIC_HEADER) {
366+
offset += SCAN_STEP;
367+
continue;
368+
}
361369

362-
// Parse the actual log message header
370+
// Parse the message to determine entry size
371+
const size_t msg_offset = offset + entry_header_size;
363372
auto entry_data = parse_entry(data_ptr, msg_offset, buf_size);
364373
auto format = std::stoul(entry_data[m_field_indices.at("format")]);
365374
auto argc = std::stoul(entry_data[m_field_indices.at("argc")]);
366375

367-
result += format_entry_row(entry_data);
376+
const size_t payload_size = calculate_entry_size(argc, format);
377+
const size_t full_entry_size = entry_header_size + payload_size + entry_footer_size;
378+
379+
// Check if we have space for the full entry
380+
if (offset + full_entry_size > buf_size) {
381+
break;
382+
}
383+
384+
// Validate footer magic (last byte of footer structure)
385+
const size_t footer_magic_offset = offset + entry_header_size + payload_size + entry_footer_size - 1;
386+
if (data_ptr[footer_magic_offset] != MAGIC_FOOTER) {
387+
offset += SCAN_STEP;
388+
continue;
389+
}
368390

369-
// Calculate total entry size including header/footer
370-
size_t payload_size = calculate_entry_size(argc, format);
371-
size_t full_entry_size = entry_header_size + payload_size + entry_footer_size;
391+
// Valid entry found - format and add it
392+
result += format_entry_row(entry_data);
372393
offset += full_entry_size;
373394
}
374395
return result;

0 commit comments

Comments
 (0)