[JSC] sampling-profiler can see garbage Wasm::Callee* pointer which is HashTable...
authorysuzuki@apple.com <ysuzuki@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 7 Aug 2019 02:48:07 +0000 (02:48 +0000)
committerysuzuki@apple.com <ysuzuki@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 7 Aug 2019 02:48:07 +0000 (02:48 +0000)
https://bugs.webkit.org/show_bug.cgi?id=200494

Reviewed by Saam Barati.

The sampling-profiler can see a garbage pointer which is like Wasm::Callee*. This can be filtered by HashSet<Callee*>.
But this is safe only when the garbage pointer is not deleted / empty values. We saw occasional crash with JetStream2/tsf-wasm.
This patch filters out these values with `HashSet<Callee*>::isValidValue`.

* wasm/WasmCalleeRegistry.h:
(JSC::Wasm::CalleeRegistry::isValidCallee):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248337 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/wasm/WasmCalleeRegistry.h

index f16ae73..48c6469 100644 (file)
@@ -1,3 +1,17 @@
+2019-08-06  Yusuke Suzuki  <ysuzuki@apple.com>
+
+        [JSC] sampling-profiler can see garbage Wasm::Callee* pointer which is HashTable deleted / empty values
+        https://bugs.webkit.org/show_bug.cgi?id=200494
+
+        Reviewed by Saam Barati.
+
+        The sampling-profiler can see a garbage pointer which is like Wasm::Callee*. This can be filtered by HashSet<Callee*>.
+        But this is safe only when the garbage pointer is not deleted / empty values. We saw occasional crash with JetStream2/tsf-wasm.
+        This patch filters out these values with `HashSet<Callee*>::isValidValue`.
+
+        * wasm/WasmCalleeRegistry.h:
+        (JSC::Wasm::CalleeRegistry::isValidCallee):
+
 2019-08-06  Commit Queue  <commit-queue@webkit.org>
 
         Unreviewed, rolling out r248289.
index 7802415..d412697 100644 (file)
@@ -62,6 +62,8 @@ public:
 
     bool isValidCallee(const AbstractLocker&, Callee* callee)
     {
+        if (!HashSet<Callee*>::isValidValue(callee))
+            return false;
         return m_calleeSet.contains(callee);
     }