Allow dangerous disabling of poison
authorjfbastien@apple.com <jfbastien@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 17 Jan 2018 05:40:40 +0000 (05:40 +0000)
committerjfbastien@apple.com <jfbastien@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 17 Jan 2018 05:40:40 +0000 (05:40 +0000)
https://bugs.webkit.org/show_bug.cgi?id=181685
<rdar://problem/36546265>

Reviewed by Keith Miller.

Some tools such as leak detectors and such like to look at real
pointers, and poisoned ones confuse them. Add a JSC option to
disable poisoning, but log to the console when this is done.

* runtime/JSCPoison.cpp:
(JSC::initializePoison):
* runtime/Options.h:

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

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/JSCPoison.cpp
Source/JavaScriptCore/runtime/Options.h

index 026c26e..dd025e4 100644 (file)
@@ -1,3 +1,19 @@
+2018-01-16  JF Bastien  <jfbastien@apple.com>
+
+        Allow dangerous disabling of poison
+        https://bugs.webkit.org/show_bug.cgi?id=181685
+        <rdar://problem/36546265>
+
+        Reviewed by Keith Miller.
+
+        Some tools such as leak detectors and such like to look at real
+        pointers, and poisoned ones confuse them. Add a JSC option to
+        disable poisoning, but log to the console when this is done.
+
+        * runtime/JSCPoison.cpp:
+        (JSC::initializePoison):
+        * runtime/Options.h:
+
 2018-01-16  Ryan Haddad  <ryanhaddad@apple.com>
 
         Unreviewed, rolling out r226937.
index 7770d71..708a349 100644 (file)
@@ -26,6 +26,7 @@
 #include "config.h"
 #include "JSCPoison.h"
 
+#include "Options.h"
 #include <mutex>
 #include <wtf/HashSet.h>
 
@@ -39,6 +40,8 @@ void initializePoison()
 {
     static std::once_flag initializeOnceFlag;
     std::call_once(initializeOnceFlag, [] {
+        if (!Options::usePoisoning())
+            return;
 
 #define INITIALIZE_POISON(poisonID) \
     POISON(poisonID) = makePoison();
index f0189e2..4be5f5d 100644 (file)
@@ -459,8 +459,8 @@ constexpr bool enableAsyncIteration = false;
     v(bool, useWebAssembly, true, Normal, "Expose the WebAssembly global object.") \
     \
     v(bool, enableSpectreMitigations, true, Restricted, "Enable Spectre mitigations.") \
-    \
     v(bool, enableSpectreGadgets, false, Restricted, "enable gadgets to test Spectre mitigations.") \
+    v(bool, usePoisoning, true, Normal, "Poison is randomized at load time when true, and initialized to 0 if false which defeats some Spectre and type confusion mitigations, but allows tools such as leak detectors to function better.") \
     \
     v(bool, useAsyncIterator, enableAsyncIteration, Normal, "Allow to use Async Iterator in JS.") \
     \