Fix misaligned read in physical_socket_server

which causes errors under ASAN/UBSAN

BUG=None

Change-Id: I36bf4ff706339b6e3a8fd3764551e98fce111ad7
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/365249
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Philipp Hancke <phancke@meta.com>
Cr-Commit-Position: refs/heads/main@{#43243}
This commit is contained in:
Philipp Hancke 2024-10-11 08:28:13 -07:00 committed by WebRTC LUCI CQ
parent 2dc95ba299
commit e486aedc16

View File

@ -10,6 +10,7 @@
#include "rtc_base/physical_socket_server.h" #include "rtc_base/physical_socket_server.h"
#include <cstdint> #include <cstdint>
#include <cstring>
#include <utility> #include <utility>
#if defined(_MSC_VER) && _MSC_VER < 1300 #if defined(_MSC_VER) && _MSC_VER < 1300
@ -549,10 +550,11 @@ int PhysicalSocket::DoReadFromSocket(void* buffer,
if (cmsg->cmsg_level != SOL_SOCKET) if (cmsg->cmsg_level != SOL_SOCKET)
continue; continue;
if (timestamp && cmsg->cmsg_type == SCM_TIMESTAMP) { if (timestamp && cmsg->cmsg_type == SCM_TIMESTAMP) {
timeval* ts = reinterpret_cast<timeval*>(CMSG_DATA(cmsg)); timeval ts;
std::memcpy(static_cast<void*>(&ts), CMSG_DATA(cmsg), sizeof(ts));
*timestamp = *timestamp =
rtc::kNumMicrosecsPerSec * static_cast<int64_t>(ts->tv_sec) + rtc::kNumMicrosecsPerSec * static_cast<int64_t>(ts.tv_sec) +
static_cast<int64_t>(ts->tv_usec); static_cast<int64_t>(ts.tv_usec);
} }
} }
} }