Fix CVE-2023-37450
authorJustin Michaud <justin_michaud@apple.com>
Fri, 21 Jul 2023 09:24:47 +0000 (10:24 +0100)
committerAlberto Garcia <berto@igalia.com>
Fri, 21 Jul 2023 09:24:47 +0000 (10:24 +0100)
Origin: https://github.com/WebKit/WebKit/commit/4f99c0670d2d91dbc51725a7af6909e186db1b07

===================================================================

Gbp-Pq: Name fix-CVE-2023-37450.patch

Source/JavaScriptCore/dfg/DFGPreciseLocalClobberize.h

index 704ebe7115b8c7d317a02191c391f947c8122a34..122ad3998196645241202f4cd8ce7557c8cea42a 100644 (file)
@@ -191,13 +191,19 @@ private:
         case CreateRest: {
             bool isForwardingNode = false;
             bool isPhantomNode = false;
+            bool mayReadArguments = false;
             switch (m_node->op()) {
             case ForwardVarargs:
+            // This is used iff allInlineFramesAreTailCalls, so we will
+            // actually do a real tail call and destroy our frame.
+            case TailCallForwardVarargs:
+                isForwardingNode = true;
+                break;
             case CallForwardVarargs:
             case ConstructForwardVarargs:
-            case TailCallForwardVarargs:
             case TailCallForwardVarargsInlinedCaller:
                 isForwardingNode = true;
+                mayReadArguments = true;
                 break;
             case PhantomDirectArguments:
             case PhantomClonedArguments:
@@ -209,7 +215,10 @@ private:
 
             if (isPhantomNode && m_graph.m_plan.isFTL())
                 break;
-            
+
+            if (mayReadArguments)
+                readWorld(m_node);
+
             if (isForwardingNode && m_node->hasArgumentsChild() && m_node->argumentsChild()
                 && (m_node->argumentsChild()->op() == PhantomNewArrayWithSpread || m_node->argumentsChild()->op() == PhantomSpread)) {
                 if (m_node->argumentsChild()->op() == PhantomNewArrayWithSpread)