Title: [199419] releases/WebKitGTK/webkit-2.12/Source/WebKit2
Revision
199419
Author
[email protected]
Date
2016-04-13 00:32:19 -0700 (Wed, 13 Apr 2016)

Log Message

Merge r198429 - Protect against excessive cache traversal
https://bugs.webkit.org/show_bug.cgi?id=155635
rdar://problem/24241008

Reviewed by Darin Adler.

We can't handle unlimited number of parallel cache traversal requests from the client.
We'll run out of dispatch queues and other system resources. CPU will spin.

* NetworkProcess/cache/NetworkCache.cpp:
(WebKit::NetworkCache::Cache::traverse):

    Add limit of maximum 3 traversals. When exceeded return nothing and log an error.

* NetworkProcess/cache/NetworkCache.h:

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.12/Source/WebKit2/ChangeLog (199418 => 199419)


--- releases/WebKitGTK/webkit-2.12/Source/WebKit2/ChangeLog	2016-04-13 07:30:08 UTC (rev 199418)
+++ releases/WebKitGTK/webkit-2.12/Source/WebKit2/ChangeLog	2016-04-13 07:32:19 UTC (rev 199419)
@@ -1,3 +1,21 @@
+2016-03-18  Antti Koivisto  <[email protected]>
+
+        Protect against excessive cache traversal
+        https://bugs.webkit.org/show_bug.cgi?id=155635
+        rdar://problem/24241008
+
+        Reviewed by Darin Adler.
+
+        We can't handle unlimited number of parallel cache traversal requests from the client.
+        We'll run out of dispatch queues and other system resources. CPU will spin.
+
+        * NetworkProcess/cache/NetworkCache.cpp:
+        (WebKit::NetworkCache::Cache::traverse):
+
+            Add limit of maximum 3 traversals. When exceeded return nothing and log an error.
+
+        * NetworkProcess/cache/NetworkCache.h:
+
 2016-03-22  Carlos Garcia Campos  <[email protected]>
 
         [GTK] WebInspector broken after r197620

Modified: releases/WebKitGTK/webkit-2.12/Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp (199418 => 199419)


--- releases/WebKitGTK/webkit-2.12/Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp	2016-04-13 07:30:08 UTC (rev 199418)
+++ releases/WebKitGTK/webkit-2.12/Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp	2016-04-13 07:32:19 UTC (rev 199419)
@@ -524,8 +524,22 @@
 {
     ASSERT(isEnabled());
 
-    m_storage->traverse(resourceType(), 0, [traverseHandler](const Storage::Record* record, const Storage::RecordInfo& recordInfo) {
+    // Protect against clients making excessive traversal requests.
+    const unsigned maximumTraverseCount = 3;
+    if (m_traverseCount >= maximumTraverseCount) {
+        WTFLogAlways("Maximum parallel cache traverse count exceeded. Ignoring traversal request.");
+
+        RunLoop::main().dispatch([traverseHandler] {
+            traverseHandler(nullptr);
+        });
+        return;
+    }
+
+    ++m_traverseCount;
+
+    m_storage->traverse(resourceType(), 0, [this, traverseHandler](const Storage::Record* record, const Storage::RecordInfo& recordInfo) {
         if (!record) {
+            --m_traverseCount;
             traverseHandler(nullptr);
             return;
         }

Modified: releases/WebKitGTK/webkit-2.12/Source/WebKit2/NetworkProcess/cache/NetworkCache.h (199418 => 199419)


--- releases/WebKitGTK/webkit-2.12/Source/WebKit2/NetworkProcess/cache/NetworkCache.h	2016-04-13 07:30:08 UTC (rev 199418)
+++ releases/WebKitGTK/webkit-2.12/Source/WebKit2/NetworkProcess/cache/NetworkCache.h	2016-04-13 07:32:19 UTC (rev 199419)
@@ -135,6 +135,8 @@
     std::unique_ptr<SpeculativeLoadManager> m_speculativeLoadManager;
 #endif
     std::unique_ptr<Statistics> m_statistics;
+
+    unsigned m_traverseCount { 0 };
 };
 
 }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to