Title: [159577] trunk/Source/_javascript_Core
Revision
159577
Author
msab...@apple.com
Date
2013-11-20 13:15:18 -0800 (Wed, 20 Nov 2013)

Log Message

ARMv7: Crash due to use after free of AssemblerBuffer
https://bugs.webkit.org/show_bug.cgi?id=124611

Reviewed by Geoffrey Garen.

Changed JITFinalizer constructor to take a MacroAssemblerCodePtr instead of a Label.
In finalizeFunction(), we use that value instead of calculating it from the label.

* assembler/MacroAssembler.cpp:
* dfg/DFGJITFinalizer.cpp:
(JSC::DFG::JITFinalizer::JITFinalizer):
(JSC::DFG::JITFinalizer::finalizeFunction):
* dfg/DFGJITFinalizer.h:

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (159576 => 159577)


--- trunk/Source/_javascript_Core/ChangeLog	2013-11-20 21:02:42 UTC (rev 159576)
+++ trunk/Source/_javascript_Core/ChangeLog	2013-11-20 21:15:18 UTC (rev 159577)
@@ -1,3 +1,19 @@
+2013-11-20  Michael Saboff  <msab...@apple.com>
+
+        ARMv7: Crash due to use after free of AssemblerBuffer
+        https://bugs.webkit.org/show_bug.cgi?id=124611
+
+        Reviewed by Geoffrey Garen.
+
+        Changed JITFinalizer constructor to take a MacroAssemblerCodePtr instead of a Label.
+        In finalizeFunction(), we use that value instead of calculating it from the label.
+
+        * assembler/MacroAssembler.cpp:
+        * dfg/DFGJITFinalizer.cpp:
+        (JSC::DFG::JITFinalizer::JITFinalizer):
+        (JSC::DFG::JITFinalizer::finalizeFunction):
+        * dfg/DFGJITFinalizer.h:
+
 2013-11-20  Julien Brianceau  <jbria...@cisco.com>
 
         Fix CPU(ARM_TRADITIONAL) build after r159545.

Modified: trunk/Source/_javascript_Core/dfg/DFGJITCompiler.cpp (159576 => 159577)


--- trunk/Source/_javascript_Core/dfg/DFGJITCompiler.cpp	2013-11-20 21:02:42 UTC (rev 159576)
+++ trunk/Source/_javascript_Core/dfg/DFGJITCompiler.cpp	2013-11-20 21:15:18 UTC (rev 159577)
@@ -402,9 +402,11 @@
     linkBuffer->link(m_callArityFixup, FunctionPtr((m_vm->getCTIStub(arityFixup)).code().executableAddress()));
     
     disassemble(*linkBuffer);
-    
+
+    MacroAssemblerCodePtr withArityCheck = linkBuffer->locationOf(m_arityCheck);
+
     m_graph.m_plan.finalizer = adoptPtr(new JITFinalizer(
-        m_graph.m_plan, m_jitCode.release(), linkBuffer.release(), m_arityCheck));
+        m_graph.m_plan, m_jitCode.release(), linkBuffer.release(), withArityCheck));
 }
 
 void JITCompiler::disassemble(LinkBuffer& linkBuffer)

Modified: trunk/Source/_javascript_Core/dfg/DFGJITFinalizer.cpp (159576 => 159577)


--- trunk/Source/_javascript_Core/dfg/DFGJITFinalizer.cpp	2013-11-20 21:02:42 UTC (rev 159576)
+++ trunk/Source/_javascript_Core/dfg/DFGJITFinalizer.cpp	2013-11-20 21:15:18 UTC (rev 159577)
@@ -34,11 +34,11 @@
 
 namespace JSC { namespace DFG {
 
-JITFinalizer::JITFinalizer(Plan& plan, PassRefPtr<JITCode> jitCode, PassOwnPtr<LinkBuffer> linkBuffer, MacroAssembler::Label arityCheck)
+JITFinalizer::JITFinalizer(Plan& plan, PassRefPtr<JITCode> jitCode, PassOwnPtr<LinkBuffer> linkBuffer, MacroAssemblerCodePtr withArityCheck)
     : Finalizer(plan)
     , m_jitCode(jitCode)
     , m_linkBuffer(linkBuffer)
-    , m_arityCheck(arityCheck)
+    , m_withArityCheck(withArityCheck)
 {
 }
 
@@ -58,9 +58,9 @@
 
 bool JITFinalizer::finalizeFunction()
 {
-    MacroAssemblerCodePtr withArityCheck = m_linkBuffer->locationOf(m_arityCheck);
+    RELEASE_ASSERT(!m_withArityCheck.isEmptyValue());
     m_jitCode->initializeCodeRef(m_linkBuffer->finalizeCodeWithoutDisassembly());
-    m_plan.codeBlock->setJITCode(m_jitCode, withArityCheck);
+    m_plan.codeBlock->setJITCode(m_jitCode, m_withArityCheck);
     
     finalizeCommon();
     

Modified: trunk/Source/_javascript_Core/dfg/DFGJITFinalizer.h (159576 => 159577)


--- trunk/Source/_javascript_Core/dfg/DFGJITFinalizer.h	2013-11-20 21:02:42 UTC (rev 159576)
+++ trunk/Source/_javascript_Core/dfg/DFGJITFinalizer.h	2013-11-20 21:15:18 UTC (rev 159577)
@@ -39,7 +39,7 @@
 
 class JITFinalizer : public Finalizer {
 public:
-    JITFinalizer(Plan&, PassRefPtr<JITCode>, PassOwnPtr<LinkBuffer>, MacroAssembler::Label arityCheck = MacroAssembler::Label());
+    JITFinalizer(Plan&, PassRefPtr<JITCode>, PassOwnPtr<LinkBuffer>, MacroAssemblerCodePtr withArityCheck = MacroAssemblerCodePtr(MacroAssemblerCodePtr::EmptyValue));
     virtual ~JITFinalizer();
     
     virtual bool finalize() OVERRIDE;
@@ -50,7 +50,7 @@
     
     RefPtr<JITCode> m_jitCode;
     OwnPtr<LinkBuffer> m_linkBuffer;
-    MacroAssembler::Label m_arityCheck;
+    MacroAssemblerCodePtr m_withArityCheck;
 };
 
 } } // namespace JSC::DFG
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to