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:
parent
2dc95ba299
commit
e486aedc16
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user