From e1daeef18312a0cb17eda6bed7f363d8748ed4a3 Mon Sep 17 00:00:00 2001 From: Moonchild Date: Wed, 27 Jan 2021 10:52:32 +0000 Subject: [network] Hold mutex when accessing mSecurityInfo. --- netwerk/protocol/http/nsHttpTransaction.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'netwerk/protocol') diff --git a/netwerk/protocol/http/nsHttpTransaction.cpp b/netwerk/protocol/http/nsHttpTransaction.cpp index e7f3ca0eff..9c5895cb07 100644 --- a/netwerk/protocol/http/nsHttpTransaction.cpp +++ b/netwerk/protocol/http/nsHttpTransaction.cpp @@ -765,7 +765,10 @@ nsHttpTransaction::ReadSegments(nsAHttpSegmentReader *reader, if (!mConnected && !m0RTTInProgress) { mConnected = true; - mConnection->GetSecurityInfo(getter_AddRefs(mSecurityInfo)); + nsCOMPtr info; + mConnection->GetSecurityInfo(getter_AddRefs(info)); + MutexAutoLock lock(mLock); + mSecurityInfo = std::move(info); } mDeferredSendProgress = false; @@ -1314,7 +1317,10 @@ nsHttpTransaction::Restart() seekable->Seek(nsISeekableStream::NS_SEEK_SET, 0); // clear old connection state... - mSecurityInfo = nullptr; + { + MutexAutoLock lock(mLock); + mSecurityInfo = nullptr; + } if (mConnection) { if (!mReuseOnRestart) { mConnection->DontReuse(); @@ -2489,7 +2495,10 @@ nsHttpTransaction::Finish0RTT(bool aRestart, bool aAlpnChanged /* ignored */) } else if (!mConnected) { // this is code that was skipped in ::ReadSegments while in 0RTT mConnected = true; - mConnection->GetSecurityInfo(getter_AddRefs(mSecurityInfo)); + nsCOMPtr info; + mConnection->GetSecurityInfo(getter_AddRefs(info)); + MutexAutoLock lock(mLock); + mSecurityInfo = std::move(info); } return NS_OK; } -- cgit v1.2.3