- Revision
- 270415
- Author
- [email protected]
- Date
- 2020-12-03 16:02:09 -0800 (Thu, 03 Dec 2020)
Log Message
Bad IPC from the WebProcess should not terminate the GPUProcess
https://bugs.webkit.org/show_bug.cgi?id=219511
Reviewed by Simon Fraser.
Bad IPC from the WebProcess should not terminate the GPUProcess. The GPUProcess is shared by all
WebProcesses and it is not acceptable for a single bad WebProcess to negatively impact other
WebProcesses. Instead, we should terminate the bad WebProcess, like the NetworkProcess already
does on bad IPC.
* GPUProcess/GPUConnectionToWebProcess.cpp:
(WebKit::GPUConnectionToWebProcess::didReceiveInvalidMessage):
* Shared/ProcessTerminationReason.h:
* UIProcess/API/C/WKAPICast.h:
(WebKit::toAPI):
* UIProcess/Cocoa/NavigationState.mm:
(WebKit::wkProcessTerminationReason):
* UIProcess/GPU/GPUProcessProxy.cpp:
(WebKit::GPUProcessProxy::terminateWebProcess):
* UIProcess/GPU/GPUProcessProxy.h:
* UIProcess/GPU/GPUProcessProxy.messages.in:
* UIProcess/WebPageProxy.cpp:
(WebKit::shouldReloadAfterProcessTermination):
Modified Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (270414 => 270415)
--- trunk/Source/WebKit/ChangeLog 2020-12-04 00:01:23 UTC (rev 270414)
+++ trunk/Source/WebKit/ChangeLog 2020-12-04 00:02:09 UTC (rev 270415)
@@ -1,3 +1,29 @@
+2020-12-03 Chris Dumez <[email protected]>
+
+ Bad IPC from the WebProcess should not terminate the GPUProcess
+ https://bugs.webkit.org/show_bug.cgi?id=219511
+
+ Reviewed by Simon Fraser.
+
+ Bad IPC from the WebProcess should not terminate the GPUProcess. The GPUProcess is shared by all
+ WebProcesses and it is not acceptable for a single bad WebProcess to negatively impact other
+ WebProcesses. Instead, we should terminate the bad WebProcess, like the NetworkProcess already
+ does on bad IPC.
+
+ * GPUProcess/GPUConnectionToWebProcess.cpp:
+ (WebKit::GPUConnectionToWebProcess::didReceiveInvalidMessage):
+ * Shared/ProcessTerminationReason.h:
+ * UIProcess/API/C/WKAPICast.h:
+ (WebKit::toAPI):
+ * UIProcess/Cocoa/NavigationState.mm:
+ (WebKit::wkProcessTerminationReason):
+ * UIProcess/GPU/GPUProcessProxy.cpp:
+ (WebKit::GPUProcessProxy::terminateWebProcess):
+ * UIProcess/GPU/GPUProcessProxy.h:
+ * UIProcess/GPU/GPUProcessProxy.messages.in:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::shouldReloadAfterProcessTermination):
+
2020-12-03 Alex Christensen <[email protected]>
Serialize NFA to disk before converting it to a DFA when compiling a WKContentRuleList
Modified: trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp (270414 => 270415)
--- trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp 2020-12-04 00:01:23 UTC (rev 270414)
+++ trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp 2020-12-04 00:02:09 UTC (rev 270415)
@@ -208,8 +208,8 @@
void GPUConnectionToWebProcess::didReceiveInvalidMessage(IPC::Connection& connection, IPC::MessageName messageName)
{
- WTFLogAlways("Received an invalid message \"%s\" from the web process.\n", description(messageName));
- CRASH();
+ RELEASE_LOG_FAULT(IPC, "Received an invalid message '%" PUBLIC_LOG_STRING "' from WebContent process %" PRIu64 ", requesting for it to be terminated.", description(messageName), m_webProcessIdentifier.toUInt64());
+ gpuProcess().parentProcessConnection()->send(Messages::GPUProcessProxy::TerminateWebProcess(m_webProcessIdentifier), 0);
}
#if ENABLE(WEB_AUDIO)
Modified: trunk/Source/WebKit/Shared/ProcessTerminationReason.h (270414 => 270415)
--- trunk/Source/WebKit/Shared/ProcessTerminationReason.h 2020-12-04 00:01:23 UTC (rev 270414)
+++ trunk/Source/WebKit/Shared/ProcessTerminationReason.h 2020-12-04 00:02:09 UTC (rev 270415)
@@ -34,6 +34,7 @@
Crash,
NavigationSwap,
RequestedByNetworkProcess,
+ RequestedByGPUProcess
};
}
Modified: trunk/Source/WebKit/UIProcess/API/C/WKAPICast.h (270414 => 270415)
--- trunk/Source/WebKit/UIProcess/API/C/WKAPICast.h 2020-12-04 00:01:23 UTC (rev 270414)
+++ trunk/Source/WebKit/UIProcess/API/C/WKAPICast.h 2020-12-04 00:02:09 UTC (rev 270415)
@@ -242,6 +242,7 @@
case ProcessTerminationReason::RequestedByClient:
return kWKProcessTerminationReasonRequestedByClient;
case ProcessTerminationReason::RequestedByNetworkProcess:
+ case ProcessTerminationReason::RequestedByGPUProcess:
case ProcessTerminationReason::Crash:
return kWKProcessTerminationReasonCrash;
}
Modified: trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.mm (270414 => 270415)
--- trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.mm 2020-12-04 00:01:23 UTC (rev 270414)
+++ trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.mm 2020-12-04 00:02:09 UTC (rev 270415)
@@ -1003,6 +1003,7 @@
case ProcessTerminationReason::RequestedByClient:
return _WKProcessTerminationReasonRequestedByClient;
case ProcessTerminationReason::RequestedByNetworkProcess:
+ case ProcessTerminationReason::RequestedByGPUProcess:
case ProcessTerminationReason::Crash:
return _WKProcessTerminationReasonCrash;
}
Modified: trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp (270414 => 270415)
--- trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp 2020-12-04 00:01:23 UTC (rev 270414)
+++ trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp 2020-12-04 00:02:09 UTC (rev 270415)
@@ -339,6 +339,12 @@
send(Messages::GPUProcess::ProcessDidResume(), 0);
}
+void GPUProcessProxy::terminateWebProcess(WebCore::ProcessIdentifier webProcessIdentifier)
+{
+ if (auto* process = WebProcessProxy::processForIdentifier(webProcessIdentifier))
+ process->requestTermination(ProcessTerminationReason::RequestedByGPUProcess);
+}
+
#if HAVE(VISIBILITY_PROPAGATION_VIEW)
void GPUProcessProxy::didCreateContextForVisibilityPropagation(LayerHostingContextID contextID)
{
Modified: trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h (270414 => 270415)
--- trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h 2020-12-04 00:01:23 UTC (rev 270414)
+++ trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h 2020-12-04 00:02:09 UTC (rev 270415)
@@ -100,6 +100,8 @@
void didClose(IPC::Connection&) override;
void didReceiveInvalidMessage(IPC::Connection&, IPC::MessageName) override;
+ void terminateWebProcess(WebCore::ProcessIdentifier);
+
#if HAVE(VISIBILITY_PROPAGATION_VIEW)
void didCreateContextForVisibilityPropagation(LayerHostingContextID);
#endif
Modified: trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.messages.in (270414 => 270415)
--- trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.messages.in 2020-12-04 00:01:23 UTC (rev 270414)
+++ trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.messages.in 2020-12-04 00:02:09 UTC (rev 270415)
@@ -25,9 +25,10 @@
messages -> GPUProcessProxy NotRefCounted {
#if HAVE(VISIBILITY_PROPAGATION_VIEW)
- DidCreateContextForVisibilityPropagation(WebKit::LayerHostingContextID contextID);
+ DidCreateContextForVisibilityPropagation(WebKit::LayerHostingContextID contextID)
#endif
+ TerminateWebProcess(WebCore::ProcessIdentifier webProcessIdentifier)
}
#endif // ENABLE(GPU_PROCESS)
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (270414 => 270415)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2020-12-04 00:01:23 UTC (rev 270414)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2020-12-04 00:02:09 UTC (rev 270415)
@@ -7420,6 +7420,7 @@
case ProcessTerminationReason::ExceededMemoryLimit:
case ProcessTerminationReason::ExceededCPULimit:
case ProcessTerminationReason::RequestedByNetworkProcess:
+ case ProcessTerminationReason::RequestedByGPUProcess:
case ProcessTerminationReason::Crash:
return true;
case ProcessTerminationReason::NavigationSwap: