Skip to content

Commit

Permalink
deps: backport IsValid changes from 4e8736d in V8
Browse files Browse the repository at this point in the history
V8 erroneously did null pointer checks on `this`.
It can lead to a SIGSEGV crash if node is compiled with GCC 6.
Backport relevant changes from [1] that fix this issue.

[1]: https://codereview.chromium.org/1900423002

Fixes: #6272

PR-URL: #6669
Reviewed-By: Myles Borins <myles.borins@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
targos authored and Myles Borins committed May 11, 2016
1 parent 53d33a4 commit cba635e
Show file tree
Hide file tree
Showing 5 changed files with 9 additions and 9 deletions.
4 changes: 2 additions & 2 deletions deps/v8/src/heap/incremental-marking.cc
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,7 @@ void IncrementalMarking::DeactivateIncrementalWriteBarrier() {
DeactivateIncrementalWriteBarrierForSpace(heap_->new_space());

LargePage* lop = heap_->lo_space()->first_page();
while (lop->is_valid()) {
while (LargePage::IsValid(lop)) {
SetOldSpacePageFlags(lop, false, false);
lop = lop->next_page();
}
Expand Down Expand Up @@ -396,7 +396,7 @@ void IncrementalMarking::ActivateIncrementalWriteBarrier() {
ActivateIncrementalWriteBarrier(heap_->new_space());

LargePage* lop = heap_->lo_space()->first_page();
while (lop->is_valid()) {
while (LargePage::IsValid(lop)) {
SetOldSpacePageFlags(lop, true, is_compacting_);
lop = lop->next_page();
}
Expand Down
2 changes: 1 addition & 1 deletion deps/v8/src/heap/spaces-inl.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ Page* Page::Initialize(Heap* heap, MemoryChunk* chunk, Executability executable,

bool PagedSpace::Contains(Address addr) {
Page* p = Page::FromAddress(addr);
if (!p->is_valid()) return false;
if (!Page::IsValid(p)) return false;
return p->owner() == this;
}

Expand Down
2 changes: 1 addition & 1 deletion deps/v8/src/heap/spaces.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2953,7 +2953,7 @@ LargePage* LargeObjectSpace::FindPage(Address a) {
if (e != NULL) {
DCHECK(e->value != NULL);
LargePage* page = reinterpret_cast<LargePage*>(e->value);
DCHECK(page->is_valid());
DCHECK(LargePage::IsValid(page));
if (page->Contains(a)) {
return page;
}
Expand Down
4 changes: 2 additions & 2 deletions deps/v8/src/heap/spaces.h
Original file line number Diff line number Diff line change
Expand Up @@ -278,9 +278,9 @@ class MemoryChunk {
// Only works for addresses in pointer spaces, not data or code spaces.
static inline MemoryChunk* FromAnyPointerAddress(Heap* heap, Address addr);

Address address() { return reinterpret_cast<Address>(this); }
static bool IsValid(MemoryChunk* chunk) { return chunk != nullptr; }

bool is_valid() { return address() != NULL; }
Address address() { return reinterpret_cast<Address>(this); }

MemoryChunk* next_chunk() const {
return reinterpret_cast<MemoryChunk*>(base::Acquire_Load(&next_chunk_));
Expand Down
6 changes: 3 additions & 3 deletions deps/v8/test/cctest/test-spaces.cc
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ TEST(MemoryAllocator) {
faked_space.AreaSize(), &faked_space, NOT_EXECUTABLE);

first_page->InsertAfter(faked_space.anchor()->prev_page());
CHECK(first_page->is_valid());
CHECK(Page::IsValid(first_page));
CHECK(first_page->next_page() == faked_space.anchor());
total_pages++;

Expand All @@ -325,7 +325,7 @@ TEST(MemoryAllocator) {
// Again, we should get n or n - 1 pages.
Page* other = memory_allocator->AllocatePage(
faked_space.AreaSize(), &faked_space, NOT_EXECUTABLE);
CHECK(other->is_valid());
CHECK(Page::IsValid(other));
total_pages++;
other->InsertAfter(first_page);
int page_count = 0;
Expand All @@ -336,7 +336,7 @@ TEST(MemoryAllocator) {
CHECK(total_pages == page_count);

Page* second_page = first_page->next_page();
CHECK(second_page->is_valid());
CHECK(Page::IsValid(second_page));
memory_allocator->Free(first_page);
memory_allocator->Free(second_page);
memory_allocator->TearDown();
Expand Down

0 comments on commit cba635e

Please sign in to comment.