Title: [270415] trunk/Source/WebKit
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:
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to