pw_trace_tokenized: Fixes ubsan caught bugs

Adjusts TraceQueue::TryPushBack to validate that the data_size
actually fits in the fixed data_size buffer.

Copies a size_t out of a packed struct in order to safely read it
instead of relying on unaligned access being permitted.

Bug: 542
Change-Id: I2c8a8e0a99625dfe139de4b8bfd912019b436fa0
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/68591
Commit-Queue: Ewout van Bekkum <ewout@google.com>
Pigweed-Auto-Submit: Ewout van Bekkum <ewout@google.com>
Reviewed-by: Ted Pudlik <tpudlik@google.com>
2 files changed
tree: ce11971ef0d268a3f97dfcc5a0adb1de802dd0b4
  1. build_overrides/
  2. docker/
  3. docs/
  4. pw_allocator/
  5. pw_analog/
  6. pw_android_toolchain/
  7. pw_arduino_build/
  8. pw_assert/
  9. pw_assert_basic/
  10. pw_assert_log/
  11. pw_base64/
  12. pw_bloat/
  13. pw_blob_store/
  14. pw_bluetooth_hci/
  15. pw_boot/
  16. pw_boot_cortex_m/
  17. pw_build/
  18. pw_build_info/
  19. pw_build_mcuxpresso/
  20. pw_bytes/
  21. pw_checksum/
  22. pw_chrono/
  23. pw_chrono_embos/
  24. pw_chrono_freertos/
  25. pw_chrono_stl/
  26. pw_chrono_threadx/
  27. pw_cli/
  28. pw_console/
  29. pw_containers/
  30. pw_cpu_exception/
  31. pw_cpu_exception_cortex_m/
  32. pw_crypto/
  33. pw_docgen/
  34. pw_doctor/
  35. pw_env_setup/
  36. pw_file/
  37. pw_function/
  38. pw_fuzzer/
  39. pw_hdlc/
  40. pw_hex_dump/
  41. pw_i2c/
  42. pw_interrupt/
  43. pw_interrupt_cortex_m/
  44. pw_kvs/
  45. pw_libc/
  46. pw_log/
  47. pw_log_basic/
  48. pw_log_null/
  49. pw_log_rpc/
  50. pw_log_tokenized/
  51. pw_malloc/
  52. pw_malloc_freelist/
  53. pw_metric/
  54. pw_minimal_cpp_stdlib/
  55. pw_module/
  56. pw_multisink/
  57. pw_package/
  58. pw_persistent_ram/
  59. pw_polyfill/
  60. pw_preprocessor/
  61. pw_presubmit/
  62. pw_protobuf/
  63. pw_protobuf_compiler/
  64. pw_random/
  65. pw_result/
  66. pw_ring_buffer/
  67. pw_router/
  68. pw_rpc/
  69. pw_snapshot/
  70. pw_software_update/
  71. pw_span/
  72. pw_status/
  73. pw_stm32cube_build/
  74. pw_stream/
  75. pw_string/
  76. pw_symbolizer/
  77. pw_sync/
  78. pw_sync_baremetal/
  79. pw_sync_embos/
  80. pw_sync_freertos/
  81. pw_sync_stl/
  82. pw_sync_threadx/
  83. pw_sys_io/
  84. pw_sys_io_arduino/
  85. pw_sys_io_baremetal_lm3s6965evb/
  86. pw_sys_io_baremetal_stm32f429/
  87. pw_sys_io_mcuxpresso/
  88. pw_sys_io_stdio/
  89. pw_target_runner/
  90. pw_thread/
  91. pw_thread_embos/
  92. pw_thread_freertos/
  93. pw_thread_stl/
  94. pw_thread_threadx/
  95. pw_tls_client/
  96. pw_tls_client_boringssl/
  97. pw_tls_client_mbedtls/
  98. pw_tokenizer/
  99. pw_tool/
  100. pw_toolchain/
  101. pw_trace/
  102. pw_trace_tokenized/
  103. pw_transfer/
  104. pw_unit_test/
  105. pw_varint/
  106. pw_watch/
  107. pw_web_ui/
  108. pw_work_queue/
  109. targets/
  110. third_party/
  111. .bazelignore
  112. .bazelrc
  113. .clang-format
  114. .clang-tidy
  115. .eslintrc.json
  116. .gitattributes
  117. .gitignore
  118. .gn
  119. .prettierrc.js
  120. .pylintrc
  121. activate.bat
  122. AUTHORS
  123. bootstrap.bat
  124. bootstrap.sh
  125. BUILD.bazel
  126. BUILD.gn
  127. BUILDCONFIG.gn
  128. CMakeLists.txt
  129. LICENSE
  130. modules.gni
  131. OWNERS
  132. package.json
  133. PW_PLUGINS
  134. README.md
  135. tsconfig.json
  136. WORKSPACE
  137. yarn.lock
README.md

Pigweed

Pigweed is an open source collection of embedded-targeted libraries–or as we like to call them, modules. These modules are building blocks and infrastructure that enable faster and more reliable development on small-footprint MMU-less 32-bit microcontrollers like the STMicroelectronics STM32L452 or the Nordic nRF52832.

For more information please see our website: https://pigweed.dev/

Links