New issue
Advanced search Search tips

Issue 683020 link

Starred by 3 users

Issue metadata

Status: WontFix
Owner:
Closed: Jan 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux
Pri: 1
Type: Bug-Security



Sign in to add a comment

The browser crashed caused by global-buffer-overflow.And d8 crashed caused by segv.

Reported by cdsrc2...@gmail.com, Jan 20 2017

Issue description

UserAgent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36

Steps to reproduce the problem:
1. launch chromium with these flags.> ./chrome --js-flags="--allow-natives-syntax" --no-sandbox ./crash.html

or,

launch d8 with these flags.> ./d8 --allow-natives-syntax ./crash.js

It would not crash everytime, so you should test for a couple of times.

What is the expected behavior?

What went wrong?
he browser crashed caused by global-buffer-overflow.And d8 crashed caused by segv.

When we test for this issue, we found that the browser dumped different crash logs with the same input file.

1. d8
==16816==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x563e6aae8f11 bp 0x7ffef5718fc0 sp 0x7ffef5718f80 T0)
==16816==The signal is caused by a READ memory access.
==16816==Hint: address points to the zero page.
    #0 0x563e6aae8f10 in FromAddress ./out/d8-asan-ubsan/../../v8/src/heap/spaces.h:679:53
    #1 0x563e6aae8f10 in RecordSlot ./out/d8-asan-ubsan/../../v8/src/heap/mark-compact-inl.h:63:0
    #2 0x563e6aae8f10 in VisitPointer ./out/d8-asan-ubsan/../../v8/src/heap/incremental-marking.cc:243:0
    #3 0x563e6aae8f10 in VisitTransitionArray ./out/d8-asan-ubsan/../../v8/src/heap/objects-visiting-inl.h:367:0
    #4 0x563e6aae6da3 in IterateBody ./out/d8-asan-ubsan/../../v8/src/heap/objects-visiting.h:358:5
    #5 0x563e6aae6da3 in VisitObject ./out/d8-asan-ubsan/../../v8/src/heap/incremental-marking.cc:843:0
    #6 0x563e6aae6da3 in ProcessMarkingDeque ./out/d8-asan-ubsan/../../v8/src/heap/incremental-marking.cc:890:0
    #7 0x563e6aae6da3 in Step ./out/d8-asan-ubsan/../../v8/src/heap/incremental-marking.cc:1166:0
    #8 0x563e6aae69a8 in AdvanceIncrementalMarking ./out/d8-asan-ubsan/../../v8/src/heap/incremental-marking.cc:1064:7
    #9 0x563e6aae3d26 in Step ./out/d8-asan-ubsan/../../v8/src/heap/incremental-marking-job.cc:37:32
    #10 0x563e6aae3d26 in RunInternal ./out/d8-asan-ubsan/../../v8/src/heap/incremental-marking-job.cc:57:0
    #11 0x563e6b0940ee in PumpMessageLoop ./out/d8-asan-ubsan/../../v8/src/libplatform/default-platform.cc:161:9
    #12 0x563e6a55f64e in EmptyMessageQueues ./out/d8-asan-ubsan/../../v8/src/d8.cc:2599:12
    #13 0x563e6a55f64e in ExecuteString ./out/d8-asan-ubsan/../../v8/src/d8.cc:530:0
    #14 0x563e6a566a8c in Execute ./out/d8-asan-ubsan/../../v8/src/d8.cc:2068:10
    #15 0x563e6a56857

Did this work before? N/A 

Chrome version: 55.0.2883.87  Channel: stable
OS Version: Ubuntu 14.04.5
Flash Version:
 
attachment.zip
6.2 KB Download

Comment 1 by cdsrc2...@gmail.com, Jan 20 2017

chrome crash log:
==12215==ERROR: AddressSanitizer: global-buffer-overflow on address 0x55c892a83ca8 at pc 0x55c87bce2b6c bp 0x7fffa06969d0 sp 0x7fffa06969c8
READ of size 8 at 0x55c892a83ca8 thread T0 (chrome)
    #0 0x55c87bce2b6b in GetVisitor ./out/asan-chrome/../../v8/src/heap/objects-visiting-inl.h:20:37
    #1 0x55c87bce2b6b in IterateBody ./out/asan-chrome/../../v8/src/heap/objects-visiting.h:358:0
    #2 0x55c87bce2b6b in VisitObject ./out/asan-chrome/../../v8/src/heap/incremental-marking.cc:843:0
    #3 0x55c87bce2b6b in ProcessMarkingDeque ./out/asan-chrome/../../v8/src/heap/incremental-marking.cc:890:0
    #4 0x55c87bce2b6b in Step ./out/asan-chrome/../../v8/src/heap/incremental-marking.cc:1166:0
    #5 0x55c87bce361f in AdvanceIncrementalMarkingOnAllocation ./out/asan-chrome/../../v8/src/heap/incremental-marking.cc:1146:25
    #6 0x55c87bdbd12a in AllocationStep ./out/asan-chrome/../../v8/src/heap/heap.h:2666:7
    #7 0x55c87bdbd12a in InlineAllocationStep ./out/asan-chrome/../../v8/src/heap/spaces.cc:1807:0
    #8 0x55c87bdbd12a in EnsureAllocation ./out/asan-chrome/../../v8/src/heap/spaces.cc:1750:0
    #9 0x55c87bc226cf in AllocateRawUnaligned ./out/asan-chrome/../../v8/src/heap/spaces-inl.h:557:10
    #10 0x55c87bc226cf in AllocateRaw ./out/asan-chrome/../../v8/src/heap/spaces-inl.h:581:0
    #11 0x55c87bc226cf in AllocateRaw ./out/asan-chrome/../../v8/src/heap/heap-inl.h:318:0
    #12 0x55c87bc98d87 in AllocateFillerObject ./out/asan-chrome/../../v8/src/heap/heap.cc:2100:35
    #13 0x55c87bbd4ebe in NewFillerObject ./out/asan-chrome/../../v8/src/factory.cc:85:3
    #14 0x55c87c48ff7b in __RT_impl_Runtime_AllocateInNewSpace ./out/asan-chrome/../../v8/src/runtime/runtime-internal.cc:281:31
    #15 0x55c87c48ff7b in Runtime_AllocateInNewSpace ./out/asan-chrome/../../v8/src/runtime/runtime-internal.cc:274:0
    #7 0x7fb4c9c04426  (<unknown module>)
    #8 0x7fb4c9c05716  (<unknown module>)
    #9 0x7fb4c9c5214b  (<unknown module>)
    #10 0x7fb4c9d0f0fa  (<unknown module>)
    #11 0x7fb4c9cc608d  (<unknown module>)
    #12 0x7fb4c9ca1a1c  (<unknown module>)
    #13 0x7fb4c9c05954  (<unknown module>)
    #14 0x7fb4c9ca0aa2  (<unknown module>)
    #15 0x7fb4c9c2d5a0  (<unknown module>)

Comment 2 Deleted

Comment 3 by cdsrc2...@gmail.com, Jan 20 2017

fix log:
v8 version:5.7.496
chrome version:57.0.2986.0  canary
Cc: ishell@chromium.org hablich@chromium.org machenb...@chromium.org jkummerow@chromium.org
Components: Blink>JavaScript
Labels: Security_Impact-Stable Security_Severity-High
Owner: rossberg@chromium.org
Status: Assigned (was: Unconfirmed)
Over to the V8 sheriff
Owner: neis@chromium.org
Not a ClusterFuzz bug, reassigning to V8 stability sheriff.

Comment 6 by neis@chromium.org, Jan 23 2017

Cc: jarin@chromium.org
Project Member

Comment 7 by sheriffbot@chromium.org, Jan 23 2017

Labels: M-55
Project Member

Comment 8 by sheriffbot@chromium.org, Jan 23 2017

Labels: -Pri-2 Pri-1

Comment 9 by neis@chromium.org, Jan 23 2017

Unfortunately I can't reproduce this.

Using the stable version, I get a SyntaxError because the runtime function used to take only one argument.
Using the canary version, I get a CHECK failure because the runtime function is used in an invalid way (such functions should not be called from user code).

Comment 10 by neis@chromium.org, Jan 23 2017

Just to clarify, by runtime function I'm referring to %NewFunctionContext.
As mentioned, this issue will not be reproduced every times.Maybe you need to try a few more times.I tested many times,and I got these type of feedbacks.

1. ./d8 --allow-natives-syntax ./crash.js
./crash.js:8: RangeError: Maximum call stack size exceeded
    this[255]  = new Int32Array(new Array(0xff000000,0xfffc,-65536,-32767,65535,128))
               ^
RangeError: Maximum call stack size exceeded
    at Proxy.f2880 (./crash.js:8:16)
    at JSON.parse (<anonymous>)
    at ./crash.js:32:6

2. ./d8 --allow-natives-syntax ./crash.js
ASAN:DEADLYSIGNAL
=================================================================
==13817==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x55f9ff45bff1 bp 0x7fff3434f9a0 sp 0x7fff3434f950 T0)
==13817==The signal is caused by a READ memory access.
==13817==Hint: address points to the zero page.
    #0 0x55f9ff45bff0 in FromAddress v8/src/heap/spaces.h:679:53
    #1 0x55f9ff45bff0 in RecordSlot v8/src/heap/mark-compact-inl.h:63
    #2 0x55f9ff45bff0 in MarkObjectByPointer v8/src/heap/mark-compact.cc:1159
    #3 0x55f9ff45bff0 in VisitPointer v8/src/heap/mark-compact.cc:1120
    #4 0x55f9ff45bff0 in v8::internal::StaticMarkingVisitor<v8::internal::MarkCompactMarkingVisitor>::VisitTransitionArray(v8::internal::Map*, v8::internal::HeapObject*) v8/src/heap/objects-visiting-inl.h:367
    #5 0x55f9ff438da3 in IterateBody v8/src/heap/objects-visiting.h:358:5
    #6 0x55f9ff438da3 in VisitObject v8/src/heap/incremental-marking.cc:843
    #7 0x55f9ff438da3 in ProcessMarkingDeque v8/src/heap/incremental-marking.cc:890
    #8 0x55f9ff438da3 in v8::internal::IncrementalMarking::Step(unsigned long, v8::internal::IncrementalMarking::CompletionAction, v8::internal::IncrementalMarking::ForceCompletionAction, v8::internal::StepOrigin) v8/src/heap/incremental-marking.cc:1166
    #9 0x55f9ff4389a8 in v8::internal::IncrementalMarking::AdvanceIncrementalMarking(double, v8::internal::IncrementalMarking::CompletionAction, v8::internal::IncrementalMarking::ForceCompletionAction, v8::internal::StepOrigin) v8/src/heap/incremental-marking.cc:1064:7
    #10 0x55f9ff435d26 in Step v8/src/heap/incremental-marking-job.cc:37:32
    #11 0x55f9ff435d26 in v8::internal::IncrementalMarkingJob::Task::RunInternal() v8/src/heap/incremental-marking-job.cc:57
    #12 0x55f9ff9e60ee in v8::platform::DefaultPlatform::PumpMessageLoop(v8::Isolate*) v8/src/libplatform/default-platform.cc:161:9
    #13 0x55f9feeb164e in EmptyMessageQueues v8/src/d8.cc:2599:12
    #14 0x55f9feeb164e in v8::Shell::ExecuteString(v8::Isolate*, v8::Local<v8::String>, v8::Local<v8::Value>, bool, bool) v8/src/d8.cc:530
    #15 0x55f9feeb8a8c in v8::SourceGroup::Execute(v8::Isolate*) v8/src/d8.cc:2068:10
    #16 0x55f9feeba57f in v8::Shell::RunMain(v8::Isolate*, int, char**, bool) v8/src/d8.cc:2564:34
    #17 0x55f9feebe9bb in v8::Shell::Main(int, char**) v8/src/d8.cc:3046:16
    #18 0x7ff7a07adf44 in __libc_start_main /build/eglibc-oGUzwX/eglibc-2.19/csu/libc-start.c:287

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV v8/src/heap/spaces.h:679:53 in FromAddress
3. ./d8 --allow-natives-syntax ./crash.js
ASAN:DEADLYSIGNAL
=================================================================
==17185==ERROR: AddressSanitizer: SEGV on unknown address 0x7f54fbd82340 (pc 0x55e2fee32c24 bp 0x7fffd8094260 sp 0x7fffd8094230 T0)
==17185==The signal is caused by a READ memory access.
    #0 0x55e2fee32c23 in VisitCodeTarget v8/src/heap/objects-visiting-inl.h:265:7
    #1 0x55e2fee32c23 in void v8::internal::RelocInfo::Visit<v8::internal::MarkCompactMarkingVisitor>(v8::internal::Heap*) v8/src/x64/assembler-x64-inl.h:541
    #2 0x55e2fee3153a in IterateBody<v8::internal::MarkCompactMarkingVisitor> v8/src/objects-body-descriptors-inl.h:419:28
    #3 0x55e2fee3153a in IterateBody<v8::internal::MarkCompactMarkingVisitor> v8/src/objects-body-descriptors-inl.h:425
    #4 0x55e2fee3153a in Visit v8/src/heap/objects-visiting.h:208
    #5 0x55e2fee3153a in v8::internal::StaticMarkingVisitor<v8::internal::MarkCompactMarkingVisitor>::VisitCode(v8::internal::Map*, v8::internal::HeapObject*) v8/src/heap/objects-visiting-inl.h:420
    #6 0x55e2fee0eda3 in IterateBody v8/src/heap/objects-visiting.h:358:5
    #7 0x55e2fee0eda3 in VisitObject v8/src/heap/incremental-marking.cc:843
    #8 0x55e2fee0eda3 in ProcessMarkingDeque v8/src/heap/incremental-marking.cc:890
    #9 0x55e2fee0eda3 in v8::internal::IncrementalMarking::Step(unsigned long, v8::internal::IncrementalMarking::CompletionAction, v8::internal::IncrementalMarking::ForceCompletionAction, v8::internal::StepOrigin) v8/src/heap/incremental-marking.cc:1166
    #10 0x55e2fee0e9a8 in v8::internal::IncrementalMarking::AdvanceIncrementalMarking(double, v8::internal::IncrementalMarking::CompletionAction, v8::internal::IncrementalMarking::ForceCompletionAction, v8::internal::StepOrigin) v8/src/heap/incremental-marking.cc:1064:7
    #11 0x55e2fee0bd26 in Step v8/src/heap/incremental-marking-job.cc:37:32
    #12 0x55e2fee0bd26 in v8::internal::IncrementalMarkingJob::Task::RunInternal() v8/src/heap/incremental-marking-job.cc:57
    #13 0x55e2ff3bc0ee in v8::platform::DefaultPlatform::PumpMessageLoop(v8::Isolate*) v8/src/libplatform/default-platform.cc:161:9
    #14 0x55e2fe88764e in EmptyMessageQueues v8/src/d8.cc:2599:12
    #15 0x55e2fe88764e in v8::Shell::ExecuteString(v8::Isolate*, v8::Local<v8::String>, v8::Local<v8::Value>, bool, bool) v8/src/d8.cc:530
    #16 0x55e2fe88ea8c in v8::SourceGroup::Execute(v8::Isolate*) v8/src/d8.cc:2068:10
    #17 0x55e2fe89057f in v8::Shell::RunMain(v8::Isolate*, int, char**, bool) v8/src/d8.cc:2564:34
    #18 0x55e2fe8949bb in v8::Shell::Main(int, char**) v8/src/d8.cc:3046:16
    #19 0x7f559bb5ef44 in __libc_start_main /build/eglibc-oGUzwX/eglibc-2.19/csu/libc-start.c:287

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV v8/src/heap/objects-visiting-inl.h:265:7 in VisitCodeTarget


4. ./d8 --allow-natives-syntax ./crash.js
ASAN:DEADLYSIGNAL
=================================================================
==17251==ERROR: AddressSanitizer: SEGV on unknown address 0x00000000038f (pc 0x564db725ff24 bp 0x7ffc96a9b290 sp 0x7ffc96a9b270 T0)
==17251==The signal is caused by a READ memory access.
==17251==Hint: address points to the zero page.
    #0 0x564db725ff23 in v8::internal::ScavengingVisitor<(v8::internal::MarksHandling)0, (v8::internal::LoggingAndProfiling)1>::EvacuateFixedArray(v8::internal::Map*, v8::internal::HeapObject**, v8::internal::HeapObject*) v8/src/heap/scavenger.cc:257
    #1 0x564db7218da3 in IterateBody v8/src/heap/objects-visiting.h:358:5
    #2 0x564db7218da3 in VisitObject v8/src/heap/incremental-marking.cc:843
    #3 0x564db7218da3 in ProcessMarkingDeque v8/src/heap/incremental-marking.cc:890
    #4 0x564db7218da3 in v8::internal::IncrementalMarking::Step(unsigned long, v8::internal::IncrementalMarking::CompletionAction, v8::internal::IncrementalMarking::ForceCompletionAction, v8::internal::StepOrigin) v8/src/heap/incremental-marking.cc:1166
    #5 0x564db72189a8 in v8::internal::IncrementalMarking::AdvanceIncrementalMarking(double, v8::internal::IncrementalMarking::CompletionAction, v8::internal::IncrementalMarking::ForceCompletionAction, v8::internal::StepOrigin) v8/src/heap/incremental-marking.cc:1064:7
    #6 0x564db7215d26 in Step v8/src/heap/incremental-marking-job.cc:37:32
    #7 0x564db7215d26 in v8::internal::IncrementalMarkingJob::Task::RunInternal() v8/src/heap/incremental-marking-job.cc:57
    #8 0x564db77c60ee in v8::platform::DefaultPlatform::PumpMessageLoop(v8::Isolate*) v8/src/libplatform/default-platform.cc:161:9
    #9 0x564db6c9164e in EmptyMessageQueues v8/src/d8.cc:2599:12
    #10 0x564db6c9164e in v8::Shell::ExecuteString(v8::Isolate*, v8::Local<v8::String>, v8::Local<v8::Value>, bool, bool) v8/src/d8.cc:530
    #11 0x564db6c98a8c in v8::SourceGroup::Execute(v8::Isolate*) v8/src/d8.cc:2068:10
    #12 0x564db6c9a57f in v8::Shell::RunMain(v8::Isolate*, int, char**, bool) v8/src/d8.cc:2564:34
    #13 0x564db6c9e9bb in v8::Shell::Main(int, char**) v8/src/d8.cc:3046:16
    #14 0x7ff8d0748f44 in __libc_start_main /build/eglibc-oGUzwX/eglibc-2.19/csu/libc-start.c:287

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV v8/src/heap/scavenger.cc:257 in v8::internal::ScavengingVisitor<(v8::internal::MarksHandling)0, (v8::internal::LoggingAndProfiling)1>::EvacuateFixedArray(v8::internal::Map*, v8::internal::HeapObject**, v8::internal::HeapObject*)
==17251==ABORTING

Comment 13 by neis@chromium.org, Jan 23 2017

How are you building d8?
just follow this site, https://dev.chromium.org/developers/testing/addresssanitizer.

is_asan = true
enable_nacl = false  # Necessary until NaCl GN build is more complete.
is_debug = false  # Release build.

And ninja -C out/d8-asan d8

Comment 15 by neis@chromium.org, Jan 23 2017

I was running asan too but my asan build had is_debug = true. After changing that to false, I consistenly get the RangeError:

$ d8 Asan --allow-natives-syntax crash.js 
crash.js:8: RangeError: Maximum call stack size exceeded
    this[255]  = new Int32Array(new Array(0xff000000,0xfffc,-65536,-32767,65535,128))
               ^
RangeError: Maximum call stack size exceeded
    at Proxy.f2880 crash.js:8:16)
    at JSON.parse (<anonymous>)
    at crash.js:32:6

Will investigate more tomorrow.
One thing, I forgot to tell you, I built my d8 with another flag: "is_ubsan=true".I dont know whether this is the reason that you can't reproduce this issue. Maybe you can add this flag and rebuild d8.
Sometimes I get a RangeError,but sometimes I get a segv on FromAddress.
I download the newest version of source code: 58.0.2992.0, and it crashed too.

Some test informations are in the attachment.
屏幕快照 2017-01-24 18.14.18.png
490 KB View Download

Comment 19 by neis@chromium.org, Jan 24 2017

I was able to observe the segfault once, will investigate more.

Comment 20 by neis@chromium.org, Jan 24 2017

Status: WontFix (was: Assigned)
I'm pretty sure this is a consequence of the invalid use of an internal runtime function.  Closing this as WontFix.  Please reopen if you have a repro that does not use the natives-syntax feature.
Project Member

Comment 21 by sheriffbot@chromium.org, May 2 2017

Labels: -Restrict-View-SecurityTeam allpublic
This bug has been closed for more than 14 weeks. Removing security view restrictions.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
 Issue 736077  has been merged into this issue.

Sign in to add a comment