[Lldb-commits] [lldb] b10c2f8 - Align mach exception data before accessing it
Jason Molenda via lldb-commits
lldb-commits at lists.llvm.org
Fri Aug 18 15:32:14 PDT 2023
Author: Jason Molenda
Date: 2023-08-18T15:32:03-07:00
New Revision: b10c2f846d936a98eecfcef1a90a754522282285
URL: https://github.com/llvm/llvm-project/commit/b10c2f846d936a98eecfcef1a90a754522282285
DIFF: https://github.com/llvm/llvm-project/commit/b10c2f846d936a98eecfcef1a90a754522282285.diff
LOG: Align mach exception data before accessing it
The mach exception data may not be doubleword aligned when we receive
it. We use memcpy to align it later in this method when we save
the data, but for printing the value at the top, we need to do the
same or ubsan can trigger when LOG_EXCEPTIONS is enabled in
debugserver.
Added:
Modified:
lldb/tools/debugserver/source/MacOSX/MachException.cpp
Removed:
################################################################################
diff --git a/lldb/tools/debugserver/source/MacOSX/MachException.cpp b/lldb/tools/debugserver/source/MacOSX/MachException.cpp
index e760a3ef9faae3..eab4cdfc8b775d 100644
--- a/lldb/tools/debugserver/source/MacOSX/MachException.cpp
+++ b/lldb/tools/debugserver/source/MacOSX/MachException.cpp
@@ -95,13 +95,20 @@ catch_mach_exception_raise(mach_port_t exc_port, mach_port_t thread_port,
mach_exception_data_t exc_data,
mach_msg_type_number_t exc_data_count) {
if (DNBLogCheckLogBit(LOG_EXCEPTIONS)) {
+ std::vector<uint64_t> exc_datas;
+ uint64_t tmp;
+ for (unsigned i = 0; i < exc_data_count; ++i) {
+ // Perform an unaligned copy.
+ memcpy(&tmp, &exc_data[i], sizeof(uint64_t));
+ exc_datas.push_back(tmp);
+ }
DNBLogThreaded("::%s ( exc_port = 0x%4.4x, thd_port = 0x%4.4x, tsk_port = "
"0x%4.4x, exc_type = %d ( %s ), exc_data[%d] = { 0x%llx, "
"0x%llx })",
__FUNCTION__, exc_port, thread_port, task_port, exc_type,
MachException::Name(exc_type), exc_data_count,
- (uint64_t)(exc_data_count > 0 ? exc_data[0] : 0xBADDBADD),
- (uint64_t)(exc_data_count > 1 ? exc_data[1] : 0xBADDBADD));
+ (uint64_t)(exc_data_count > 0 ? exc_datas[0] : 0xBADDBADD),
+ (uint64_t)(exc_data_count > 1 ? exc_datas[1] : 0xBADDBADD));
}
g_message->exc_type = 0;
g_message->exc_data.clear();
More information about the lldb-commits
mailing list