Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
deps: backport IsValid changes from 4e8736d in V8
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
  • Loading branch information
targos committed May 10, 2016
commit 931584e5c96ed7ad629f6f0ee1b571619cb736e3
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