Firefox · DOM
CVE-2026-100770
Logic Error in DOM
Overview
High
Severity
—
CVSS
No
Exploited ITW
Fixed
Fix Status
Files Changed
dom/ipc/BrowserParent.cppdom/ipc/BrowserParent.h
Patch
diff --git a/dom/ipc/BrowserParent.cpp b/dom/ipc/BrowserParent.cpp
index 1a75fd6f3ee..3d4aaf698e4 100644
--- a/dom/ipc/BrowserParent.cpp
+++ b/dom/ipc/BrowserParent.cpp
@@ -278,6 +278,7 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(BrowserParent)
NS_IMPL_CYCLE_COLLECTION_UNLINK(mBrowsingContext)
NS_IMPL_CYCLE_COLLECTION_UNLINK(mFrameElement)
NS_IMPL_CYCLE_COLLECTION_UNLINK(mBrowserDOMWindow)
+ NS_IMPL_CYCLE_COLLECTION_UNLINK(mBrowserHost)
tmp->UnlinkManager();
NS_IMPL_CYCLE_COLLECTION_UNLINK_WEAK_REFERENCE
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
@@ -287,6 +288,7 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(BrowserParent)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mBrowsingContext)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mFrameElement)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mBrowserDOMWindow)
+ NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mBrowserHost)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_RAWPTR(Manager())
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
@@ -305,7 +307,6 @@ BrowserParent::BrowserParent(ContentParent* aManager, const TabId& aTabId,
mFrameLoader(nullptr),
mChromeFlags(aChromeFlags),
mBrowserBridgeParent(nullptr),
- mBrowserHost(nullptr),
mContentCache(*this),
mRect(0, 0, 0, 0),
mDimensions(0, 0),
@@ -893,6 +894,10 @@ void BrowserParent::ActorDestroy(ActorDestroyReason why) {
// and it may confuse the frontend.
mBrowsingContext->BrowserParentDestroyed(
this, why == AbnormalShutdown || why == ManagedEndpointDropped);
+
+ // BrowserHost::DestroyComplete() has usually cleared this already, but it is
+ // never reached if we had no frame loader.
+ mBrowserHost = nullptr;
}
mozilla::ipc::IPCResult BrowserParent::RecvMoveFocus(
diff --git a/dom/ipc/BrowserParent.h b/dom/ipc/BrowserParent.h
index 86de70e990f..ded5152b534 100644
--- a/dom/ipc/BrowserParent.h
+++ b/dom/ipc/BrowserParent.h
@@ -894,7 +894,7 @@ class BrowserParent final : public PBrowserParent,
// Pointer to the BrowserHost that owns us, if any. This is mutually
// exclusive with mBrowserBridgeParent, and one is guaranteed to be
// non-null.
- BrowserHost* mBrowserHost;
+ RefPtr<BrowserHost> mBrowserHost;
// KeepAlive for the containing process.
// NOTE: While this is a strong reference to ContentParent, which is
Loading diff…
References
On This Page