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