Title: [270897] branches/safari-610-branch
Revision
270897
Author
[email protected]
Date
2020-12-16 10:31:52 -0800 (Wed, 16 Dec 2020)

Log Message

Cherry-pick r270686. rdar://problem/72321615

    2020-12-11  Mark Lam  <[email protected]>

    Add extra validation after untagging code pointers.
    https://bugs.webkit.org/show_bug.cgi?id=219765
    rdar://72069920

    Reviewed by Robin Morisset.

    * assembler/AbstractMacroAssembler.h:
    (JSC::AbstractMacroAssembler::untagReturnAddress):
    (JSC::AbstractMacroAssembler::validateUntaggedPtr):
    * assembler/MacroAssemblerARM64E.h:
    (JSC::MacroAssemblerARM64E::untagReturnAddress):
    (JSC::MacroAssemblerARM64E::validateUntaggedPtr):
    * dfg/DFGOSRExitCompilerCommon.cpp:
    (JSC::DFG::reifyInlinedCallFrames):
    * ftl/FTLThunks.cpp:
    (JSC::FTL::genericGenerationThunkGenerator):
    * jit/CCallHelpers.h:
    (JSC::CCallHelpers::prepareForTailCallSlow):
    * jit/CallFrameShuffler.cpp:
    (JSC::CallFrameShuffler::prepareForTailCall):
    * jit/ThunkGenerators.cpp:
    (JSC::emitPointerValidation):
    (JSC::arityFixupGenerator):
    * llint/LLIntThunks.cpp:
    (JSC::LLInt::createTailCallGate):
    (JSC::LLInt::untagGateThunk):
    * wasm/js/WebAssemblyFunction.cpp:
    (JSC::WebAssemblyFunction::jsCallEntrypointSlow):

Modified Paths

Property Changed

Diff

Index: branches/safari-610-branch =================================================================== --- branches/safari-610-branch 2020-12-16 18:23:34 UTC (rev 270896) +++ branches/safari-610-branch 2020-12-16 18:31:52 UTC (rev 270897)

Property changes: branches/safari-610-branch


Modified: svn:mergeinfo

-/trunk:53455 \ No newline at end of property +/trunk:53455,270686 \ No newline at end of property

Modified: branches/safari-610-branch/Source/_javascript_Core/ChangeLog (270896 => 270897)


--- branches/safari-610-branch/Source/_javascript_Core/ChangeLog	2020-12-16 18:23:34 UTC (rev 270896)
+++ branches/safari-610-branch/Source/_javascript_Core/ChangeLog	2020-12-16 18:31:52 UTC (rev 270897)
@@ -1,3 +1,38 @@
+2020-12-16  Mark Lam  <[email protected]>
+
+        Cherry-pick r270686. rdar://problem/72321615
+
+    2020-12-11  Mark Lam  <[email protected]>
+
+            Add extra validation after untagging code pointers.
+            https://bugs.webkit.org/show_bug.cgi?id=219765
+            rdar://72069920
+
+            Reviewed by Robin Morisset.
+
+            * assembler/AbstractMacroAssembler.h:
+            (JSC::AbstractMacroAssembler::untagReturnAddress):
+            (JSC::AbstractMacroAssembler::validateUntaggedPtr):
+            * assembler/MacroAssemblerARM64E.h:
+            (JSC::MacroAssemblerARM64E::untagReturnAddress):
+            (JSC::MacroAssemblerARM64E::validateUntaggedPtr):
+            * dfg/DFGOSRExitCompilerCommon.cpp:
+            (JSC::DFG::reifyInlinedCallFrames):
+            * ftl/FTLThunks.cpp:
+            (JSC::FTL::genericGenerationThunkGenerator):
+            * jit/CCallHelpers.h:
+            (JSC::CCallHelpers::prepareForTailCallSlow):
+            * jit/CallFrameShuffler.cpp:
+            (JSC::CallFrameShuffler::prepareForTailCall):
+            * jit/ThunkGenerators.cpp:
+            (JSC::emitPointerValidation):
+            (JSC::arityFixupGenerator):
+            * llint/LLIntThunks.cpp:
+            (JSC::LLInt::createTailCallGate):
+            (JSC::LLInt::untagGateThunk):
+            * wasm/js/WebAssemblyFunction.cpp:
+            (JSC::WebAssemblyFunction::jsCallEntrypointSlow):
+
 2020-12-08  Russell Epstein  <[email protected]>
 
         Cherry-pick r270052. rdar://problem/72099688

Modified: branches/safari-610-branch/Source/_javascript_Core/assembler/AbstractMacroAssembler.h (270896 => 270897)


--- branches/safari-610-branch/Source/_javascript_Core/assembler/AbstractMacroAssembler.h	2020-12-16 18:23:34 UTC (rev 270896)
+++ branches/safari-610-branch/Source/_javascript_Core/assembler/AbstractMacroAssembler.h	2020-12-16 18:31:52 UTC (rev 270897)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008-2018 Apple Inc. All rights reserved.
+ * Copyright (C) 2008-2020 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -996,7 +996,7 @@
     }
 
     ALWAYS_INLINE void tagReturnAddress() { }
-    ALWAYS_INLINE void untagReturnAddress() { }
+    ALWAYS_INLINE void untagReturnAddress(RegisterID = RegisterID::InvalidGPRReg) { }
 
     ALWAYS_INLINE void tagPtr(PtrTag, RegisterID) { }
     ALWAYS_INLINE void tagPtr(RegisterID, RegisterID) { }
@@ -1003,6 +1003,7 @@
     ALWAYS_INLINE void untagPtr(PtrTag, RegisterID) { }
     ALWAYS_INLINE void untagPtr(RegisterID, RegisterID) { }
     ALWAYS_INLINE void removePtrTag(RegisterID) { }
+    ALWAYS_INLINE void validateUntaggedPtr(RegisterID, RegisterID = RegisterID::InvalidGPRReg) { }
 
 protected:
     AbstractMacroAssembler()

Modified: branches/safari-610-branch/Source/_javascript_Core/assembler/MacroAssemblerARM64E.h (270896 => 270897)


--- branches/safari-610-branch/Source/_javascript_Core/assembler/MacroAssemblerARM64E.h	2020-12-16 18:23:34 UTC (rev 270896)
+++ branches/safari-610-branch/Source/_javascript_Core/assembler/MacroAssemblerARM64E.h	2020-12-16 18:31:52 UTC (rev 270897)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018-2019 Apple Inc. All rights reserved.
+ * Copyright (C) 2018-2020 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -47,9 +47,10 @@
         tagPtr(ARM64Registers::sp, ARM64Registers::lr);
     }
 
-    ALWAYS_INLINE void untagReturnAddress()
+    ALWAYS_INLINE void untagReturnAddress(RegisterID scratch = InvalidGPR)
     {
         untagPtr(ARM64Registers::sp, ARM64Registers::lr);
+        validateUntaggedPtr(ARM64Registers::lr, scratch);
     }
 
     ALWAYS_INLINE void tagPtr(PtrTag tag, RegisterID target)
@@ -75,6 +76,13 @@
         m_assembler.autib(target, tagGPR);
     }
 
+    ALWAYS_INLINE void validateUntaggedPtr(RegisterID target, RegisterID scratch = InvalidGPR)
+    {
+        if (scratch == InvalidGPR)
+            scratch = getCachedDataTempRegisterIDAndInvalidate();
+        load8(Address(target), scratch);
+    }
+
     ALWAYS_INLINE void untagPtr(RegisterID tag, RegisterID target)
     {
         m_assembler.autib(target, tag);

Modified: branches/safari-610-branch/Source/_javascript_Core/dfg/DFGOSRExitCompilerCommon.cpp (270896 => 270897)


--- branches/safari-610-branch/Source/_javascript_Core/dfg/DFGOSRExitCompilerCommon.cpp	2020-12-16 18:23:34 UTC (rev 270896)
+++ branches/safari-610-branch/Source/_javascript_Core/dfg/DFGOSRExitCompilerCommon.cpp	2020-12-16 18:31:52 UTC (rev 270897)
@@ -284,6 +284,7 @@
             jit.addPtr(AssemblyHelpers::TrustedImm32(sizeof(CallerFrameAndPC)), GPRInfo::callFrameRegister, GPRInfo::regT2);
             jit.untagPtr(GPRInfo::regT2, GPRInfo::regT3);
             jit.addPtr(AssemblyHelpers::TrustedImm32(inlineCallFrame->returnPCOffset() + sizeof(void*)), GPRInfo::callFrameRegister, GPRInfo::regT2);
+            jit.validateUntaggedPtr(GPRInfo::regT3, GPRInfo::nonArgGPR0);
             jit.tagPtr(GPRInfo::regT2, GPRInfo::regT3);
 #endif
             jit.storePtr(GPRInfo::regT3, AssemblyHelpers::addressForByteOffset(inlineCallFrame->returnPCOffset()));

Modified: branches/safari-610-branch/Source/_javascript_Core/ftl/FTLThunks.cpp (270896 => 270897)


--- branches/safari-610-branch/Source/_javascript_Core/ftl/FTLThunks.cpp	2020-12-16 18:23:34 UTC (rev 270896)
+++ branches/safari-610-branch/Source/_javascript_Core/ftl/FTLThunks.cpp	2020-12-16 18:31:52 UTC (rev 270897)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013-2019 Apple Inc. All rights reserved.
+ * Copyright (C) 2013-2020 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -117,6 +117,7 @@
 
 #if CPU(ARM64E)
     jit.untagPtr(resultTag, AssemblyHelpers::linkRegister);
+    jit.validateUntaggedPtr(AssemblyHelpers::linkRegister);
     jit.tagReturnAddress();
 #else
     UNUSED_PARAM(resultTag);

Modified: branches/safari-610-branch/Source/_javascript_Core/jit/CCallHelpers.h (270896 => 270897)


--- branches/safari-610-branch/Source/_javascript_Core/jit/CCallHelpers.h	2020-12-16 18:23:34 UTC (rev 270896)
+++ branches/safari-610-branch/Source/_javascript_Core/jit/CCallHelpers.h	2020-12-16 18:31:52 UTC (rev 270897)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2019 Apple Inc. All rights reserved.
+ * Copyright (C) 2011-2020 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -782,6 +782,7 @@
 #if CPU(ARM64E)
         addPtr(TrustedImm32(sizeof(CallerFrameAndPC)), MacroAssembler::framePointerRegister, tempGPR);
         untagPtr(tempGPR, linkRegister);
+        validateUntaggedPtr(linkRegister, tempGPR);
 #endif
 #elif CPU(MIPS)
         loadPtr(Address(framePointerRegister, sizeof(void*)), returnAddressRegister);

Modified: branches/safari-610-branch/Source/_javascript_Core/jit/CallFrameShuffler.cpp (270896 => 270897)


--- branches/safari-610-branch/Source/_javascript_Core/jit/CallFrameShuffler.cpp	2020-12-16 18:23:34 UTC (rev 270896)
+++ branches/safari-610-branch/Source/_javascript_Core/jit/CallFrameShuffler.cpp	2020-12-16 18:31:52 UTC (rev 270897)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2015-2019 Apple Inc. All rights reserved.
+ * Copyright (C) 2015-2020 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -446,6 +446,7 @@
     m_jit.addPtr(MacroAssembler::TrustedImm32(sizeof(CallerFrameAndPC)), MacroAssembler::framePointerRegister);
     m_jit.untagPtr(MacroAssembler::framePointerRegister, MacroAssembler::linkRegister);
     m_jit.subPtr(MacroAssembler::TrustedImm32(sizeof(CallerFrameAndPC)), MacroAssembler::framePointerRegister);
+    m_jit.validateUntaggedPtr(MacroAssembler::linkRegister);
 #endif
 
 #elif CPU(MIPS)

Modified: branches/safari-610-branch/Source/_javascript_Core/jit/ThunkGenerators.cpp (270896 => 270897)


--- branches/safari-610-branch/Source/_javascript_Core/jit/ThunkGenerators.cpp	2020-12-16 18:23:34 UTC (rev 270896)
+++ branches/safari-610-branch/Source/_javascript_Core/jit/ThunkGenerators.cpp	2020-12-16 18:31:52 UTC (rev 270897)
@@ -49,7 +49,7 @@
     isNonZero.link(&jit);
     jit.pushToSave(pointerGPR);
     jit.untagPtr(tag, pointerGPR);
-    jit.load8(pointerGPR, pointerGPR);
+    jit.validateUntaggedPtr(pointerGPR, pointerGPR);
     jit.popToRestore(pointerGPR);
 }
 
@@ -394,6 +394,7 @@
     jit.loadPtr(JSInterfaceJIT::Address(GPRInfo::callFrameRegister, CallFrame::returnPCOffset()), GPRInfo::regT3);
     jit.addPtr(JSInterfaceJIT::TrustedImm32(sizeof(CallerFrameAndPC)), GPRInfo::callFrameRegister, extraTemp);
     jit.untagPtr(extraTemp, GPRInfo::regT3);
+    jit.validateUntaggedPtr(GPRInfo::regT3, extraTemp);
     PtrTag tempReturnPCTag = static_cast<PtrTag>(random());
     jit.move(JSInterfaceJIT::TrustedImmPtr(tempReturnPCTag), extraTemp);
     jit.tagPtr(extraTemp, GPRInfo::regT3);
@@ -450,6 +451,7 @@
     jit.loadPtr(JSInterfaceJIT::Address(GPRInfo::callFrameRegister, CallFrame::returnPCOffset()), GPRInfo::regT3);
     jit.move(JSInterfaceJIT::TrustedImmPtr(tempReturnPCTag), extraTemp);
     jit.untagPtr(extraTemp, GPRInfo::regT3);
+    jit.validateUntaggedPtr(GPRInfo::regT3, extraTemp);
     jit.addPtr(JSInterfaceJIT::TrustedImm32(sizeof(CallerFrameAndPC)), GPRInfo::callFrameRegister, extraTemp);
     jit.tagPtr(extraTemp, GPRInfo::regT3);
     jit.storePtr(GPRInfo::regT3, JSInterfaceJIT::Address(GPRInfo::callFrameRegister, CallFrame::returnPCOffset()));

Modified: branches/safari-610-branch/Source/_javascript_Core/wasm/js/WebAssemblyFunction.cpp (270896 => 270897)


--- branches/safari-610-branch/Source/_javascript_Core/wasm/js/WebAssemblyFunction.cpp	2020-12-16 18:23:34 UTC (rev 270896)
+++ branches/safari-610-branch/Source/_javascript_Core/wasm/js/WebAssemblyFunction.cpp	2020-12-16 18:31:52 UTC (rev 270897)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016-2019 Apple Inc. All rights reserved.
+ * Copyright (C) 2016-2020 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -414,7 +414,7 @@
     jit.move(CCallHelpers::TrustedImmPtr(this), GPRInfo::regT0);
     jit.emitFunctionEpilogue();
 #if CPU(ARM64E)
-    jit.untagReturnAddress();
+    jit.untagReturnAddress(scratchGPR);
 #endif
     auto jumpToHostCallThunk = jit.jump();
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to