From b8841f8ebe03fd9dec42cd95be2c032fe80abc87 Mon Sep 17 00:00:00 2001 From: Andy Tamilo Date: Fri, 26 Jul 2024 10:49:03 +0300 Subject: [PATCH] Fix race condition on ObjCNetworkMonitor::network_monitor_ There is a race condition on reading `ObjCNetworkMonitor::_network_monitor` field. The `ObjCNetworkMonitor::OnPathUpdate()` checks its nullability on the org.webrtc.RTCDispatcherNetworkMonitor thread BEFORE the `ObjCNetworkMonitor::Start()` assigns it on the network_monitor thread. In addition, this field is neither atomic nor protected by mutex so its last assigned value is not guaranteed to be visible to another [reading] thread. Bug: webrtc:355238623 Change-Id: I1a05215111cc873b7d4931824e18f281aebfb91f Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/357880 Commit-Queue: Danil Chapovalov Reviewed-by: Taylor Brandstetter Reviewed-by: Peter Hanspers Reviewed-by: Jonas Oreland Cr-Commit-Position: refs/heads/main@{#42778} --- AUTHORS | 1 + sdk/objc/native/src/objc_network_monitor.mm | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index 7b16d7c38a..48214c53a6 100644 --- a/AUTHORS +++ b/AUTHORS @@ -20,6 +20,7 @@ Alex Henrie Andrew MacDonald Andrey Efremov Andrew Johnson +Andy Tamilo Anil Kumar Anton Barkov Ben Strong diff --git a/sdk/objc/native/src/objc_network_monitor.mm b/sdk/objc/native/src/objc_network_monitor.mm index 535548c64c..1a1f445e1d 100644 --- a/sdk/objc/native/src/objc_network_monitor.mm +++ b/sdk/objc/native/src/objc_network_monitor.mm @@ -84,9 +84,9 @@ rtc::NetworkMonitorInterface::InterfaceInfo ObjCNetworkMonitor::GetInterfaceInfo void ObjCNetworkMonitor::OnPathUpdate( std::map adapter_type_by_name) { - RTC_DCHECK(network_monitor_ != nil); thread_->PostTask(SafeTask(safety_flag_, [this, adapter_type_by_name] { RTC_DCHECK_RUN_ON(thread_); + RTC_DCHECK(network_monitor_ != nil); adapter_type_by_name_ = adapter_type_by_name; InvokeNetworksChangedCallback(); }));