From e486aedc1660ae3912fb0317cda7deba7db06fc3 Mon Sep 17 00:00:00 2001 From: Philipp Hancke Date: Fri, 11 Oct 2024 08:28:13 -0700 Subject: [PATCH] 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 Reviewed-by: Per Kjellander Reviewed-by: Harald Alvestrand Commit-Queue: Philipp Hancke Cr-Commit-Position: refs/heads/main@{#43243} --- rtc_base/physical_socket_server.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/rtc_base/physical_socket_server.cc b/rtc_base/physical_socket_server.cc index 71da31ecec..af133b8529 100644 --- a/rtc_base/physical_socket_server.cc +++ b/rtc_base/physical_socket_server.cc @@ -10,6 +10,7 @@ #include "rtc_base/physical_socket_server.h" #include +#include #include #if defined(_MSC_VER) && _MSC_VER < 1300 @@ -549,10 +550,11 @@ int PhysicalSocket::DoReadFromSocket(void* buffer, if (cmsg->cmsg_level != SOL_SOCKET) continue; if (timestamp && cmsg->cmsg_type == SCM_TIMESTAMP) { - timeval* ts = reinterpret_cast(CMSG_DATA(cmsg)); + timeval ts; + std::memcpy(static_cast(&ts), CMSG_DATA(cmsg), sizeof(ts)); *timestamp = - rtc::kNumMicrosecsPerSec * static_cast(ts->tv_sec) + - static_cast(ts->tv_usec); + rtc::kNumMicrosecsPerSec * static_cast(ts.tv_sec) + + static_cast(ts.tv_usec); } } }