Backed out changeset 7e9307a4a744 (bug 1555557) for talos failures on a CLOSED TREE

This commit is contained in:
Coroiu Cristina 2020-06-26 17:32:28 +03:00
parent d706a36326
commit a2dd6e3165
3 changed files with 47 additions and 131 deletions

View File

@ -998,7 +998,7 @@ DataStorage::Writer::Run() {
}
const char* ptr = mData.get();
uint32_t remaining = mData.Length();
int32_t remaining = mData.Length();
uint32_t written = 0;
while (remaining > 0) {
rv = outputStream->Write(ptr, remaining, &written);

View File

@ -10,7 +10,6 @@
#include "ScopedNSSTypes.h"
#include "SharedSSLState.h"
#include "mozilla/Assertions.h"
#include "mozilla/TaskQueue.h"
#include "mozilla/Telemetry.h"
#include "mozilla/TextUtils.h"
#include "mozilla/Unused.h"
@ -39,53 +38,6 @@ using namespace mozilla::psm;
#define CERT_OVERRIDE_FILE_NAME "cert_override.txt"
class nsCertOverrideService::WriterRunnable : public Runnable {
public:
explicit WriterRunnable(nsCString& aData, nsCOMPtr<nsIFile> aFile)
: Runnable("nsCertOverrideService::WriterRunnable"),
mData(aData),
mFile(std::move(aFile)) {}
NS_IMETHOD
Run() override {
MOZ_ASSERT(!NS_IsMainThread());
nsresult rv;
nsCOMPtr<nsIOutputStream> outputStream;
rv = NS_NewSafeLocalFileOutputStream(
getter_AddRefs(outputStream), mFile,
PR_CREATE_FILE | PR_TRUNCATE | PR_WRONLY);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
const char* ptr = mData.get();
uint32_t remaining = mData.Length();
uint32_t written = 0;
while (remaining > 0) {
rv = outputStream->Write(ptr, remaining, &written);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
remaining -= written;
ptr += written;
}
nsCOMPtr<nsISafeOutputStream> safeStream = do_QueryInterface(outputStream);
MOZ_ASSERT(safeStream);
rv = safeStream->Finish();
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
return NS_OK;
}
private:
nsCString mData;
nsCOMPtr<nsIFile> mFile;
};
void nsCertOverride::convertBitsToString(OverrideBits ob,
/*out*/ nsACString& str) {
str.Truncate();
@ -131,26 +83,13 @@ void nsCertOverride::convertStringToBits(const nsACString& str,
}
NS_IMPL_ISUPPORTS(nsCertOverrideService, nsICertOverrideService, nsIObserver,
nsISupportsWeakReference, nsIAsyncShutdownBlocker)
nsISupportsWeakReference)
nsCertOverrideService::nsCertOverrideService()
: mDisableAllSecurityCheck(false), mMutex("nsCertOverrideService.mutex") {}
nsCertOverrideService::~nsCertOverrideService() = default;
static nsCOMPtr<nsIAsyncShutdownClient> GetShutdownBarrier() {
nsCOMPtr<nsIAsyncShutdownService> svc =
mozilla::services::GetAsyncShutdownService();
MOZ_RELEASE_ASSERT(svc);
nsCOMPtr<nsIAsyncShutdownClient> barrier;
nsresult rv = svc->GetProfileBeforeChange(getter_AddRefs(barrier));
MOZ_RELEASE_ASSERT(NS_SUCCEEDED(rv));
MOZ_RELEASE_ASSERT(barrier);
return barrier;
}
nsresult nsCertOverrideService::Init() {
if (!NS_IsMainThread()) {
MOZ_ASSERT_UNREACHABLE("nsCertOverrideService initialized off main thread");
@ -170,11 +109,6 @@ nsresult nsCertOverrideService::Init() {
Observe(nullptr, "profile-do-change", nullptr);
}
nsresult rv = GetShutdownBarrier()->AddBlocker(
this, NS_LITERAL_STRING(__FILE__), __LINE__,
NS_LITERAL_STRING("nsCertOverrideService shutdown"));
MOZ_RELEASE_ASSERT(NS_SUCCEEDED(rv));
SharedSSLState::NoteCertOverrideServiceInstantiated();
return NS_OK;
}
@ -319,7 +253,22 @@ nsresult nsCertOverrideService::Write(const MutexAutoLock& aProofOfLock) {
return NS_OK;
}
nsCString output;
nsresult rv;
nsCOMPtr<nsIOutputStream> fileOutputStream;
rv = NS_NewSafeLocalFileOutputStream(getter_AddRefs(fileOutputStream),
mSettingsFile, -1, 0600);
if (NS_FAILED(rv)) {
NS_ERROR("failed to open cert_warn_settings.txt for writing");
return rv;
}
// get a buffered output stream 4096 bytes big, to optimize writes
nsCOMPtr<nsIOutputStream> bufferedOutputStream;
rv = NS_NewBufferedOutputStream(getter_AddRefs(bufferedOutputStream),
fileOutputStream.forget(), 4096);
if (NS_FAILED(rv)) {
return rv;
}
static const char kHeader[] =
"# PSM Certificate Override Settings file" NS_LINEBREAK
@ -327,7 +276,8 @@ nsresult nsCertOverrideService::Write(const MutexAutoLock& aProofOfLock) {
/* see ::Read for file format */
output.Append(kHeader);
uint32_t unused;
bufferedOutputStream->Write(kHeader, sizeof(kHeader) - 1, &unused);
static const char kTab[] = "\t";
for (auto iter = mSettingsTable.Iter(); !iter.Done(); iter.Next()) {
@ -341,39 +291,34 @@ nsresult nsCertOverrideService::Write(const MutexAutoLock& aProofOfLock) {
nsAutoCString bits_string;
nsCertOverride::convertBitsToString(settings.mOverrideBits, bits_string);
output.Append(entry->mHostWithPort);
output.Append(kTab);
output.Append(sSHA256OIDString);
output.Append(kTab);
output.Append(settings.mFingerprint);
output.Append(kTab);
output.Append(bits_string);
output.Append(kTab);
output.Append(settings.mDBKey);
output.Append(NS_LINEBREAK);
bufferedOutputStream->Write(entry->mHostWithPort.get(),
entry->mHostWithPort.Length(), &unused);
bufferedOutputStream->Write(kTab, sizeof(kTab) - 1, &unused);
bufferedOutputStream->Write(sSHA256OIDString, sizeof(sSHA256OIDString) - 1,
&unused);
bufferedOutputStream->Write(kTab, sizeof(kTab) - 1, &unused);
bufferedOutputStream->Write(settings.mFingerprint.get(),
settings.mFingerprint.Length(), &unused);
bufferedOutputStream->Write(kTab, sizeof(kTab) - 1, &unused);
bufferedOutputStream->Write(bits_string.get(), bits_string.Length(),
&unused);
bufferedOutputStream->Write(kTab, sizeof(kTab) - 1, &unused);
bufferedOutputStream->Write(settings.mDBKey.get(), settings.mDBKey.Length(),
&unused);
bufferedOutputStream->Write(NS_LINEBREAK, NS_LINEBREAK_LEN, &unused);
}
// Make a clone of the file to pass to the WriterRunnable.
nsCOMPtr<nsIFile> file;
nsresult rv;
rv = mSettingsFile->Clone(getter_AddRefs(file));
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
if (!mWriterTaskQueue) {
nsCOMPtr<nsIEventTarget> target =
do_GetService(NS_STREAMTRANSPORTSERVICE_CONTRACTID);
MOZ_ASSERT(target);
mWriterTaskQueue = new TaskQueue(target.forget());
}
nsCOMPtr<nsIRunnable> runnable(new WriterRunnable(output, file));
rv = mWriterTaskQueue->Dispatch(runnable.forget());
if (NS_FAILED(rv)) {
return rv;
// All went ok. Maybe except for problems in Write(), but the stream detects
// that for us
nsCOMPtr<nsISafeOutputStream> safeStream =
do_QueryInterface(bufferedOutputStream);
MOZ_ASSERT(safeStream, "Expected a safe output stream!");
if (safeStream) {
rv = safeStream->Finish();
if (NS_FAILED(rv)) {
NS_WARNING("failed to save cert warn settings file! possible dataloss");
return rv;
}
}
return NS_OK;
@ -733,25 +678,3 @@ void nsCertOverrideService::GetHostWithPort(const nsACString& aHostName,
}
_retval.Assign(hostPort);
}
// nsIAsyncShutdownBlocker implementation
NS_IMETHODIMP
nsCertOverrideService::GetName(nsAString& aName) {
aName = NS_LITERAL_STRING("nsCertOverrideService: shutdown");
return NS_OK;
}
NS_IMETHODIMP
nsCertOverrideService::GetState(nsIPropertyBag**) { return NS_OK; }
NS_IMETHODIMP
nsCertOverrideService::BlockShutdown(nsIAsyncShutdownClient*) {
if (mWriterTaskQueue) {
mWriterTaskQueue->BeginShutdown();
mWriterTaskQueue->AwaitShutdownAndIdle();
}
nsresult rv = GetShutdownBarrier()->RemoveBlocker(this);
MOZ_RELEASE_ASSERT(NS_SUCCEEDED(rv));
return NS_OK;
}

View File

@ -12,7 +12,6 @@
#include "mozilla/HashFunctions.h"
#include "mozilla/Mutex.h"
#include "mozilla/TypedEnumBits.h"
#include "nsIAsyncShutdown.h"
#include "nsICertOverrideService.h"
#include "nsIFile.h"
#include "nsIObserver.h"
@ -91,13 +90,11 @@ class nsCertOverrideEntry final : public PLDHashEntryHdr {
class nsCertOverrideService final : public nsICertOverrideService,
public nsIObserver,
public nsSupportsWeakReference,
public nsIAsyncShutdownBlocker {
public nsSupportsWeakReference {
public:
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSICERTOVERRIDESERVICE
NS_DECL_NSIOBSERVER
NS_DECL_NSIASYNCSHUTDOWNBLOCKER
nsCertOverrideService();
@ -139,10 +136,6 @@ class nsCertOverrideService final : public nsICertOverrideService,
nsCertOverride::OverrideBits ob,
const nsACString& dbKey,
const mozilla::MutexAutoLock& aProofOfLock);
private:
class WriterRunnable;
RefPtr<TaskQueue> mWriterTaskQueue;
};
#define NS_CERTOVERRIDE_CID \