Commit c7c412a3 authored by Taylor Brandstetter's avatar Taylor Brandstetter Committed by Commit Bot
Browse files

Check for null before accessing SctpTransport map.

Bug: chromium:1104061
Change-Id: I52d44ff1603341777a873e747c625665bc11bfa5
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/179161


Commit-Queue: Taylor <deadbeef@webrtc.org>
Reviewed-by: default avatarHarald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31720}
parent f60d4c2d
......@@ -311,18 +311,21 @@ class SctpTransport::UsrSctpWrapper {
}
static void UninitializeUsrSctp() {
delete g_transport_map_;
RTC_LOG(LS_INFO) << __FUNCTION__;
// usrsctp_finish() may fail if it's called too soon after the transports
// are
// closed. Wait and try again until it succeeds for up to 3 seconds.
for (size_t i = 0; i < 300; ++i) {
if (usrsctp_finish() == 0) {
delete g_transport_map_;
g_transport_map_ = nullptr;
return;
}
rtc::Thread::SleepMs(10);
}
delete g_transport_map_;
g_transport_map_ = nullptr;
RTC_LOG(LS_ERROR) << "Failed to shutdown usrsctp.";
}
......@@ -349,6 +352,11 @@ class SctpTransport::UsrSctpWrapper {
size_t length,
uint8_t tos,
uint8_t set_df) {
if (!g_transport_map_) {
RTC_LOG(LS_ERROR)
<< "OnSctpOutboundPacket called after usrsctp uninitialized?";
return EINVAL;
}
SctpTransport* transport =
g_transport_map_->Retrieve(reinterpret_cast<uintptr_t>(addr));
if (!transport) {
......@@ -405,6 +413,12 @@ class SctpTransport::UsrSctpWrapper {
// id of the transport that created them, so [0] is as good as any other.
struct sockaddr_conn* sconn =
reinterpret_cast<struct sockaddr_conn*>(&addrs[0]);
if (!g_transport_map_) {
RTC_LOG(LS_ERROR)
<< "GetTransportFromSocket called after usrsctp uninitialized?";
usrsctp_freeladdrs(addrs);
return nullptr;
}
SctpTransport* transport = g_transport_map_->Retrieve(
reinterpret_cast<uintptr_t>(sconn->sconn_addr));
usrsctp_freeladdrs(addrs);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment