AddressSanitizer: heap-use-after-free on address 0x6060001966a8 at js::SourceCompressionTask::runtimeMatches involving evalInWorker
Categories
(Core :: JavaScript Engine, defect)
Tracking
()
People
(Reporter: gkw, Unassigned)
References
(Blocks 1 open bug)
Details
(Keywords: reporter-external, testcase, Whiteboard: [reporter-external] [client-bounty-form] [verif?])
Attachments
(3 files)
Compile js shell with:
AR=ar sh ./configure --disable-profiling --enable-address-sanitizer --disable-jemalloc --with-ccache --enable-gczeal --enable-debug-symbols --disable-tests
Run with:
--fuzzing-safe --ion-offthread-compile=off --ion-eager --gc-zeal=2
on Xubuntu 20.04 LTS, GCC 9, 16GB RAM.
Testcase is intermittent, reproduce using m-c rev b1146cce5053.
The first bad revision is:
changeset: https://hg.mozilla.org/mozilla-central/rev/7a81a85d9881
user: Yoshi Cheng-Hao Huang
date: Wed Jun 17 07:37:40 2020 +0000
summary: Bug 1628204 - Part 1: Move append to compressionFinishedList inside runTask. r=jonco
![]() |
Reporter | |
Comment 1•5 years ago
|
||
![]() |
Reporter | |
Comment 2•5 years ago
|
||
Yoshi, let me know if you can reproduce this / if this is correct.
![]() |
Reporter | |
Comment 3•5 years ago
|
||
Same testcase but commenting here instead:
reduced.js loading a.js (attached) :
for (let i = 0; i < 999; i++) {
// SPLICE DDBEGIN
eval("evalInWorker(\"\\load(\\\"a.js\\\");\")");
// SPLICE DDEND
}
// js/src/tests/test262/shell.js
![]() |
Reporter | |
Comment 4•5 years ago
|
||
Feel free to move to JS/SpiderMonkey component.
![]() |
Reporter | |
Comment 5•5 years ago
|
||
ASan stack (same as attached text file in comment 0):
=================================================================
==399536==ERROR: AddressSanitizer: heap-use-after-free on address 0x6060001966a8 at pc 0x5585374ee40d bp 0x7fe0bfa7c1f0 sp 0x7fe0bfa7c1e8
READ of size 8 at 0x6060001966a8 thread T664
#0 0x5585374ee40c in js::SourceCompressionTask::runtimeMatches(JSRuntime*) const /home/mini3lin/trees/mozilla-central/js/src/vm/HelperThreads.h:820:69
#1 0x5585374ee40c in js::CancelOffThreadCompressions(JSRuntime*) /home/mini3lin/trees/mozilla-central/js/src/vm/HelperThreads.cpp:2277:25
#2 0x55853785e57a in JSRuntime::destroyRuntime() /home/mini3lin/trees/mozilla-central/js/src/vm/Runtime.cpp:272:5
#3 0x5585376456b4 in js::DestroyContext(JSContext*) /home/mini3lin/trees/mozilla-central/js/src/vm/JSContext.cpp:213:7
#4 0x558536efde28 in WorkerMain(WorkerInput*)::$_7::operator()() const /home/mini3lin/trees/mozilla-central/js/src/shell/js.cpp:4124:5
#5 0x558536efde28 in mozilla::ScopeExit<WorkerMain(WorkerInput*)::$_7>::~ScopeExit() /home/mini3lin/shell-cache/js-64-profDisabled-asan-linux-x86_64-b1146cce5053/objdir-js/dist/include/mozilla/ScopeExit.h:111:7
#6 0x558536efde28 in WorkerMain(WorkerInput*) /home/mini3lin/trees/mozilla-central/js/src/shell/js.cpp:4186:1
#7 0x558536f1c4e7 in void js::detail::ThreadTrampoline<void (&)(WorkerInput*), WorkerInput*&>::callMain<0ul>(std::integer_sequence<unsigned long, 0ul>) /home/mini3lin/trees/mozilla-central/js/src/threading/Thread.h:217:5
#8 0x558536f1c4e7 in js::detail::ThreadTrampoline<void (&)(WorkerInput*), WorkerInput*&>::Start(void*) /home/mini3lin/trees/mozilla-central/js/src/threading/Thread.h:206:11
#9 0x7fe116bf3608 in start_thread /build/glibc-YYA7BZ/glibc-2.31/nptl/pthread_create.c:477:8
#10 0x7fe1167a0102 in clone /build/glibc-YYA7BZ/glibc-2.31/misc/../sysdeps/unix/sysv/linux/x86_64/clone.S:95
0x6060001966a8 is located 8 bytes inside of 56-byte region [0x6060001966a0,0x6060001966d8)
freed by thread T664 here:
#0 0x558536e5d72d in free /builds/worker/fetches/llvm-project/llvm/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:123:3
#1 0x5585374ee856 in js_free(void*) /home/mini3lin/shell-cache/js-64-profDisabled-asan-linux-x86_64-b1146cce5053/objdir-js/dist/include/js/Utility.h:432:3
#2 0x5585374ee856 in void js_delete<js::SourceCompressionTask>(js::SourceCompressionTask const*) /home/mini3lin/shell-cache/js-64-profDisabled-asan-linux-x86_64-b1146cce5053/objdir-js/dist/include/js/Utility.h:573:5
#3 0x5585374ee856 in JS::DeletePolicy<js::SourceCompressionTask>::operator()(js::SourceCompressionTask const*) /home/mini3lin/shell-cache/js-64-profDisabled-asan-linux-x86_64-b1146cce5053/objdir-js/dist/include/js/Utility.h:645:35
#4 0x5585374ee856 in mozilla::UniquePtr<js::SourceCompressionTask, JS::DeletePolicy<js::SourceCompressionTask> >::reset(js::SourceCompressionTask*) /home/mini3lin/shell-cache/js-64-profDisabled-asan-linux-x86_64-b1146cce5053/objdir-js/dist/include/mozilla/UniquePtr.h:302:7
#5 0x5585374ee856 in mozilla::UniquePtr<js::SourceCompressionTask, JS::DeletePolicy<js::SourceCompressionTask> >::~UniquePtr() /home/mini3lin/shell-cache/js-64-profDisabled-asan-linux-x86_64-b1146cce5053/objdir-js/dist/include/mozilla/UniquePtr.h:253:18
#6 0x5585374ee856 in js::AttachFinishedCompressions(JSRuntime*, js::AutoLockHelperThreadState&) /home/mini3lin/trees/mozilla-central/js/src/vm/HelperThreads.cpp:2302:5
#7 0x5585382ed555 in js::gc::GCRuntime::sweepCompressionTasks() /home/mini3lin/trees/mozilla-central/js/src/gc/GC.cpp:5077:3
#8 0x55853831cb76 in js::GCParallelTask::runTask() /home/mini3lin/trees/mozilla-central/js/src/gc/GCParallelTask.cpp:146:3
#9 0x5585382ee17f in js::GCParallelTask::runFromMainThread() /home/mini3lin/trees/mozilla-central/js/src/gc/GCParallelTask.cpp:120:3
#10 0x5585382ee17f in js::gc::GCRuntime::joinTask(js::GCParallelTask&, js::gcstats::PhaseKind, js::AutoLockHelperThreadState&) /home/mini3lin/trees/mozilla-central/js/src/gc/GC.cpp:5157:10
#11 0x5585382f2132 in AutoRunParallelTask::~AutoRunParallelTask() /home/mini3lin/trees/mozilla-central/js/src/gc/GC.cpp:3683:32
#12 0x5585382f2132 in js::gc::GCRuntime::beginSweepingSweepGroup(JSFreeOp*, js::SliceBudget&) /home/mini3lin/trees/mozilla-central/js/src/gc/GC.cpp:5418:3
#13 0x558538360cd7 in sweepaction::SweepActionSequence::run(js::gc::SweepAction::Args&) /home/mini3lin/trees/mozilla-central/js/src/gc/GC.cpp:6060:23
#14 0x558538353655 in sweepaction::SweepActionForEach<js::gc::SweepGroupsIter, JSRuntime*>::run(js::gc::SweepAction::Args&) /home/mini3lin/trees/mozilla-central/js/src/gc/GC.cpp:6095:19
#15 0x5585382fa19b in js::gc::GCRuntime::performSweepActions(js::SliceBudget&) /home/mini3lin/trees/mozilla-central/js/src/gc/GC.cpp:6227:48
#16 0x5585383008d0 in js::gc::GCRuntime::incrementalSlice(js::SliceBudget&, mozilla::Maybe<JSGCInvocationKind> const&, JS::GCReason, js::gc::AutoGCSession&) /home/mini3lin/trees/mozilla-central/js/src/gc/GC.cpp:6760:11
#17 0x55853830439f in js::gc::GCRuntime::gcCycle(bool, js::SliceBudget, mozilla::Maybe<JSGCInvocationKind> const&, JS::GCReason) /home/mini3lin/trees/mozilla-central/js/src/gc/GC.cpp:7170:3
#18 0x558538308090 in js::gc::GCRuntime::collect(bool, js::SliceBudget, mozilla::Maybe<JSGCInvocationKind> const&, JS::GCReason) /home/mini3lin/trees/mozilla-central/js/src/gc/GC.cpp:7405:9
#19 0x558538310187 in js::gc::GCRuntime::gc(JSGCInvocationKind, JS::GCReason) /home/mini3lin/trees/mozilla-central/js/src/gc/GC.cpp:7481:3
#20 0x558538310187 in js::gc::GCRuntime::runDebugGC() /home/mini3lin/trees/mozilla-central/js/src/gc/GC.cpp:7998:5
#21 0x558538321219 in js::gc::GCRuntime::gcIfNeededAtAllocation(JSContext*) /home/mini3lin/trees/mozilla-central/js/src/gc/Allocator.cpp:442:5
#22 0x558538321219 in bool js::gc::GCRuntime::checkAllocatorState<(js::AllowGC)1>(JSContext*, js::gc::AllocKind) /home/mini3lin/trees/mozilla-central/js/src/gc/Allocator.cpp:404:10
#23 0x558538321219 in JSString* js::AllocateStringImpl<JSString, (js::AllowGC)1>(JSContext*, js::gc::InitialHeap) /home/mini3lin/trees/mozilla-central/js/src/gc/Allocator.cpp:207:15
#24 0x55853797bd49 in JSLinearString* js::AllocateString<JSLinearString, (js::AllowGC)1>(JSContext*, js::gc::InitialHeap) /home/mini3lin/trees/mozilla-central/js/src/gc/Allocator.h:61:32
#25 0x55853797bd49 in JSLinearString* JSLinearString::new_<(js::AllowGC)1, unsigned char>(JSContext*, mozilla::UniquePtr<unsigned char [], JS::FreePolicy>, unsigned long, js::gc::InitialHeap) /home/mini3lin/trees/mozilla-central/js/src/vm/StringType-inl.h:272:11
#26 0x55853797bd49 in JSLinearString* js::NewStringDontDeflate<(js::AllowGC)1, unsigned char>(JSContext*, mozilla::UniquePtr<unsigned char [], JS::FreePolicy>, unsigned long, js::gc::InitialHeap) /home/mini3lin/trees/mozilla-central/js/src/vm/StringType.cpp:1692:10
#27 0x5585373770ad in JSLinearString* js::StringBuffer::finishStringInternal<unsigned char>(JSContext*) /home/mini3lin/trees/mozilla-central/js/src/util/StringBuffer.cpp:97:25
#28 0x5585372b79f7 in FormatErrorMessage(JSContext*, JS::Handle<JSString*>, JS::Handle<JSString*>) /home/mini3lin/trees/mozilla-central/js/src/jsexn.cpp:421:15
#29 0x5585372b4bf9 in ErrorReportToString(JSContext*, JS::Handle<JSObject*>, JSErrorReport*, JS::ErrorReportBuilder::SniffingBehavior) /home/mini3lin/trees/mozilla-central/js/src/jsexn.cpp:465:10
#30 0x5585372b4bf9 in JS::ErrorReportBuilder::init(JSContext*, JS::ExceptionStack const&, JS::ErrorReportBuilder::SniffingBehavior) /home/mini3lin/trees/mozilla-central/js/src/jsexn.cpp:491:11
#31 0x558536ea50b0 in js::shell::AutoReportException::~AutoReportException() /home/mini3lin/trees/mozilla-central/js/src/shell/js.cpp:9304:15
#32 0x558536efd92d in WorkerMain(WorkerInput*) /home/mini3lin/trees/mozilla-central/js/src/shell/js.cpp:4182:3
#33 0x558536f1c4e7 in void js::detail::ThreadTrampoline<void (&)(WorkerInput*), WorkerInput*&>::callMain<0ul>(std::integer_sequence<unsigned long, 0ul>) /home/mini3lin/trees/mozilla-central/js/src/threading/Thread.h:217:5
#34 0x558536f1c4e7 in js::detail::ThreadTrampoline<void (&)(WorkerInput*), WorkerInput*&>::Start(void*) /home/mini3lin/trees/mozilla-central/js/src/threading/Thread.h:206:11
#35 0x7fe116bf3608 in start_thread /build/glibc-YYA7BZ/glibc-2.31/nptl/pthread_create.c:477:8
previously allocated by thread T664 here:
#0 0x558536e5d9ad in malloc /builds/worker/fetches/llvm-project/llvm/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:145:3
#1 0x55853772b55b in js_arena_malloc(unsigned long, unsigned long) /home/mini3lin/shell-cache/js-64-profDisabled-asan-linux-x86_64-b1146cce5053/objdir-js/dist/include/js/Utility.h:385:10
#2 0x55853772b55b in js_malloc(unsigned long) /home/mini3lin/shell-cache/js-64-profDisabled-asan-linux-x86_64-b1146cce5053/objdir-js/dist/include/js/Utility.h:389:10
#3 0x55853772b55b in js::SourceCompressionTask* js_new<js::SourceCompressionTask, JSRuntime*, js::ScriptSource*>(JSRuntime*&&, js::ScriptSource*&&) /home/mini3lin/shell-cache/js-64-profDisabled-asan-linux-x86_64-b1146cce5053/objdir-js/dist/include/js/Utility.h:538:1
#4 0x55853772b55b in js::detail::UniqueSelector<js::SourceCompressionTask>::SingleObject js::MakeUnique<js::SourceCompressionTask, JSRuntime*, js::ScriptSource*>(JSRuntime*&&, js::ScriptSource*&&) /home/mini3lin/shell-cache/js-64-profDisabled-asan-linux-x86_64-b1146cce5053/objdir-js/dist/include/js/UniquePtr.h:43:23
#5 0x55853772b55b in js::ScriptSource::tryCompressOffThread(JSContext*) /home/mini3lin/trees/mozilla-central/js/src/vm/JSScript.cpp:2313:15
#6 0x55853818164b in js::frontend::ScriptCompiler<mozilla::Utf8Unit>::compileScript(js::frontend::CompilationInfo&, js::frontend::SharedContext*) /home/mini3lin/trees/mozilla-central/js/src/frontend/BytecodeCompiler.cpp:504:48
#7 0x55853810fd2b in JSScript* CreateGlobalScript<mozilla::Utf8Unit>(js::frontend::CompilationInfo&, js::frontend::GlobalSharedContext&, JS::SourceText<mozilla::Utf8Unit>&) /home/mini3lin/trees/mozilla-central/js/src/frontend/BytecodeCompiler.cpp:185:17
#8 0x55853810fd2b in js::frontend::CompileGlobalScript(js::frontend::CompilationInfo&, js::frontend::GlobalSharedContext&, JS::SourceText<mozilla::Utf8Unit>&) /home/mini3lin/trees/mozilla-central/js/src/frontend/BytecodeCompiler.cpp:227:10
#9 0x558537436653 in bool EvaluateSourceBuffer<mozilla::Utf8Unit>(JSContext*, js::ScopeKind, JS::Handle<JSObject*>, JS::ReadOnlyCompileOptions const&, JS::SourceText<mozilla::Utf8Unit>&, JS::MutableHandle<JS::Value>) /home/mini3lin/trees/mozilla-central/js/src/vm/CompilationAndEvaluation.cpp:491:14
#10 0x558537436653 in JS::Evaluate(JSContext*, JS::ReadOnlyCompileOptions const&, JS::SourceText<mozilla::Utf8Unit>&, JS::MutableHandle<JS::Value>) /home/mini3lin/trees/mozilla-central/js/src/vm/CompilationAndEvaluation.cpp:505:10
#11 0x55853743a001 in JS::EvaluateUtf8Path(JSContext*, JS::ReadOnlyCompileOptions const&, char const*, JS::MutableHandle<JS::Value>) /home/mini3lin/trees/mozilla-central/js/src/vm/CompilationAndEvaluation.cpp:553:10
#12 0x558536ef869b in LoadScript(JSContext*, unsigned int, JS::Value*, bool) /home/mini3lin/trees/mozilla-central/js/src/shell/js.cpp:1756:17
#13 0x55853709eec8 in CallJSNative(JSContext*, bool (*)(JSContext*, unsigned int, JS::Value*), js::CallReason, JS::CallArgs const&) /home/mini3lin/trees/mozilla-central/js/src/vm/Interpreter.cpp:484:13
#14 0x55853709eec8 in js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct, js::CallReason) /home/mini3lin/trees/mozilla-central/js/src/vm/Interpreter.cpp:576:12
#15 0x5585385a8c9e in js::jit::DoCallFallback(JSContext*, js::jit::BaselineFrame*, js::jit::ICCall_Fallback*, unsigned int, JS::Value*, JS::MutableHandle<JS::Value>) /home/mini3lin/trees/mozilla-central/js/src/jit/BaselineIC.cpp:2992:10
#16 0x3d301af99bc7 (<unknown module>)
#17 0x62100094715f (<unknown module>)
#18 0x3d301af9749e (<unknown module>)
Thread T664 created by T0 here:
#0 0x558536e4815a in pthread_create /builds/worker/fetches/llvm-project/llvm/projects/compiler-rt/lib/asan/asan_interceptors.cc:209:3
#1 0x55853736dc58 in js::Thread::create(void* (*)(void*), void*) /home/mini3lin/trees/mozilla-central/js/src/threading/posix/PosixThread.cpp:52:7
#2 0x558536f1c393 in bool js::Thread::init<void (&)(WorkerInput*), WorkerInput*&>(void (&)(WorkerInput*), WorkerInput*&) /home/mini3lin/trees/mozilla-central/js/src/threading/Thread.h:90:12
#3 0x558536ed4a2d in EvalInWorker(JSContext*, unsigned int, JS::Value*) /home/mini3lin/trees/mozilla-central/js/src/shell/js.cpp:4255:29
#4 0x55853709eec8 in CallJSNative(JSContext*, bool (*)(JSContext*, unsigned int, JS::Value*), js::CallReason, JS::CallArgs const&) /home/mini3lin/trees/mozilla-central/js/src/vm/Interpreter.cpp:484:13
#5 0x55853709eec8 in js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct, js::CallReason) /home/mini3lin/trees/mozilla-central/js/src/vm/Interpreter.cpp:576:12
#6 0x5585385a8c9e in js::jit::DoCallFallback(JSContext*, js::jit::BaselineFrame*, js::jit::ICCall_Fallback*, unsigned int, JS::Value*, JS::MutableHandle<JS::Value>) /home/mini3lin/trees/mozilla-central/js/src/jit/BaselineIC.cpp:2992:10
#7 0x3d301ac69bc7 (<unknown module>)
#8 0x621000cd8d5f (<unknown module>)
#9 0x3d301ac6749e (<unknown module>)
#10 0x558538e273e1 in EnterJit(JSContext*, js::RunState&, unsigned char*) /home/mini3lin/trees/mozilla-central/js/src/jit/Jit.cpp:105:5
#11 0x558538e273e1 in js::jit::MaybeEnterJit(JSContext*, js::RunState&) /home/mini3lin/trees/mozilla-central/js/src/jit/Jit.cpp:196:10
#12 0x55853706bd2e in js::RunScript(JSContext*, js::RunState&) /home/mini3lin/trees/mozilla-central/js/src/vm/Interpreter.cpp:441:32
#13 0x5585370a5333 in js::ExecuteKernel(JSContext*, JS::Handle<JSScript*>, JS::Handle<JSObject*>, JS::Handle<JS::Value>, js::AbstractFramePtr, JS::MutableHandle<JS::Value>) /home/mini3lin/trees/mozilla-central/js/src/vm/Interpreter.cpp:831:13
#14 0x558537151aa9 in EvalKernel(JSContext*, JS::Handle<JS::Value>, EvalType, js::AbstractFramePtr, JS::Handle<JSObject*>, unsigned char*, JS::MutableHandle<JS::Value>) /home/mini3lin/trees/mozilla-central/js/src/builtin/Eval.cpp:357:10
#15 0x5585371536d2 in js::DirectEval(JSContext*, JS::Handle<JS::Value>, JS::MutableHandle<JS::Value>) /home/mini3lin/trees/mozilla-central/js/src/builtin/Eval.cpp:486:10
#16 0x5585385a8bcc in js::jit::DoCallFallback(JSContext*, js::jit::BaselineFrame*, js::jit::ICCall_Fallback*, unsigned int, JS::Value*, JS::MutableHandle<JS::Value>) /home/mini3lin/trees/mozilla-central/js/src/jit/BaselineIC.cpp:2978:10
#17 0x3d301ac69bc7 (<unknown module>)
#18 0x621000122217 (<unknown module>)
#19 0x3d301ac6749e (<unknown module>)
SUMMARY: AddressSanitizer: heap-use-after-free /home/mini3lin/trees/mozilla-central/js/src/vm/HelperThreads.h:820:69 in js::SourceCompressionTask::runtimeMatches(JSRuntime*) const
Shadow bytes around the buggy address:
0x0c0c8002ac80: fa fa fa fa fa fa fa fa fa fa fa fa 00 00 00 00
0x0c0c8002ac90: 00 00 00 00 fa fa fa fa 00 00 00 00 00 00 00 00
0x0c0c8002aca0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c0c8002acb0: fd fd fd fd fd fd fd fa fa fa fa fa fd fd fd fd
0x0c0c8002acc0: fd fd fd fa fa fa fa fa fd fd fd fd fd fd fd fd
=>0x0c0c8002acd0: fa fa fa fa fd[fd]fd fd fd fd fd fa fa fa fa fa
0x0c0c8002ace0: 00 00 00 00 00 00 00 00 fa fa fa fa 00 00 00 00
0x0c0c8002acf0: 00 00 00 00 fa fa fa fa fa fa fa fa fa fa fa fa
0x0c0c8002ad00: fa fa fa fa fd fd fd fd fd fd fd fd fa fa fa fa
0x0c0c8002ad10: fd fd fd fd fd fd fd fd fa fa fa fa 00 00 00 00
0x0c0c8002ad20: 00 00 00 00 fa fa fa fa fd fd fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
Shadow gap: cc
==399536==ABORTING
![]() |
Reporter | |
Comment 7•5 years ago
|
||
I have a testcase for this, but bug 1647115 does not. Moreover, my bisection result came to the same regressing bug there.
Updated•5 years ago
|
Comment 8•5 years ago
|
||
(In reply to Gary Kwong [:gkw] [:nth10sd] from comment #7)
I have a testcase for this, but bug 1647115 does not. Moreover, my bisection result came to the same regressing bug there.
The bug already had a fix before this one was filed, we also detected it as an intermittent in WPT and also in Domino.
![]() |
Reporter | |
Updated•5 years ago
|
Updated•5 years ago
|
Updated•2 years ago
|
![]() |
Reporter | |
Updated•11 months ago
|
![]() |
Reporter | |
Updated•11 months ago
|
Updated•9 months ago
|
Description
•