Repository navigation
ASAN test failures #268
Copy link
Copy link
Closed
Description
=== release test-blob-buffer-too-large ===
Path: parallel/test-blob-buffer-too-large
Error: --- stderr ---
=================================================================
==93809==ERROR: AddressSanitizer: requested allocation size 0x1fffffffffffff (0x20000000001000 after adjustments for alignment, red zones etc.) exceeds maximum supported size of 0x10000000000 (thread T0)
#0 0xe74012 in calloc (/home/runner/work/node-v8/node-v8/out/Release/node+0xe74012)
#1 0xeb6374 in node::NodeArrayBufferAllocator::Allocate(unsigned long) (/home/runner/work/node-v8/node-v8/out/Release/node+0xeb6374)
#2 0x1e5e15e in v8::internal::Heap::AllocateExternalBackingStore(std::function<void* (unsigned long)> const&, unsigned long) (/home/runner/work/node-v8/node-v8/out/Release/node+0x1e5e15e)
#3 0x21fde55 in v8::internal::BackingStore::Allocate(v8::internal::Isolate*, unsigned long, v8::internal::SharedFlag, v8::internal::InitializedFlag) (/home/runner/work/node-v8/node-v8/out/Release/node+0x21fde55)
#4 0x19bb809 in v8::internal::(anonymous namespace)::ConstructBuffer(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::InitializedFlag) (/home/runner/work/node-v8/node-v8/out/Release/node+0x19bb809)
#5 0x19b9d96 in v8::internal::Builtin_ArrayBufferConstructor(int, unsigned long*, v8::internal::Isolate*) (/home/runner/work/node-v8/node-v8/out/Release/node+0x19b9d96)
#6 0x7fbed2861f35 in v8::internal::wasm::WasmEngine::SyncCompile(v8::internal::Isolate*, v8::internal::wasm::WasmFeatures, v8::internal::wasm::ErrorThrower*, v8::internal::wasm::ModuleWireBytes) (/home/runner/work/node-v8/node-v8/out/Release/node+0x3357f35)
#7 0x7fbed27c9ece in v8::internal::wasm::TurboshaftGraphBuildingInterface::StringViewWtf8Encode(v8::internal::wasm::WasmFullDecoder<v8::internal::wasm::Decoder::FullValidationTag, v8::internal::wasm::TurboshaftGraphBuildingInterface, (v8::internal::wasm::DecodingMode)0>*, v8::internal::wasm::MemoryIndexImmediate const&, unibrow::Utf8Variant, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value const&, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value const&, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value const&, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value const&, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value*, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value*) (/home/runner/work/node-v8/node-v8/out/Release/node+0x32bfece)
#8 0x7fbed2911850 in v8::internal::wasm::(anonymous namespace)::ExternalReferenceList::ExternalReferenceList() (/home/runner/work/node-v8/node-v8/out/Release/node+0x3407850)
#9 0x7fbed284fefa in v8::internal::wasm::ModuleDisassembler::PrintMemory(v8::internal::wasm::WasmMemory const&) (/home/runner/work/node-v8/node-v8/out/Release/node+0x3345efa)
#10 0x7fbed27cd97b in v8::internal::wasm::TurboshaftGraphBuildingInterface::ArrayCopy(v8::internal::wasm::WasmFullDecoder<v8::internal::wasm::Decoder::FullValidationTag, v8::internal::wasm::TurboshaftGraphBuildingInterface, (v8::internal::wasm::DecodingMode)0>*, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value const&, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value const&, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value const&, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value const&, v8::internal::wasm::ArrayIndexImmediate const&, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value const&) (/home/runner/work/node-v8/node-v8/out/Release/node+0x32c397b)
#11 0x7fbed294dd22 in v8::internal::Assembler::movsxwq(v8::internal::Register, v8::internal::Register) (/home/runner/work/node-v8/node-v8/out/Release/node+0x3443d22)
#12 0x7fbed27ccf1d in v8::internal::wasm::TurboshaftGraphBuildingInterface::ArrayCopy(v8::internal::wasm::WasmFullDecoder<v8::internal::wasm::Decoder::FullValidationTag, v8::internal::wasm::TurboshaftGraphBuildingInterface, (v8::internal::wasm::DecodingMode)0>*, v8::internal::wasm::TurboshaftGraphBuildingInterf
=== release test-buffer-slow ===
Path: parallel/test-buffer-slow
Error: --- stderr ---
=================================================================
==94660==ERROR: AddressSanitizer: requested allocation size 0x1fffffffffffff (0x20000000001000 after adjustments for alignment, red zones etc.) exceeds maximum supported size of 0x10000000000 (thread T0)
#0 0xe73e9d in malloc (/home/runner/work/node-v8/node-v8/out/Release/node+0xe73e9d)
#1 0xeb63dd in node::NodeArrayBufferAllocator::Allocate(unsigned long) (/home/runner/work/node-v8/node-v8/out/Release/node+0xeb63dd)
#2 0x1e5e15e in v8::internal::Heap::AllocateExternalBackingStore(std::function<void* (unsigned long)> const&, unsigned long) (/home/runner/work/node-v8/node-v8/out/Release/node+0x1e5e15e)
#3 0x21fde55 in v8::internal::BackingStore::Allocate(v8::internal::Isolate*, unsigned long, v8::internal::SharedFlag, v8::internal::InitializedFlag) (/home/runner/work/node-v8/node-v8/out/Release/node+0x21fde55)
#4 0x19bb809 in v8::internal::(anonymous namespace)::ConstructBuffer(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::InitializedFlag) (/home/runner/work/node-v8/node-v8/out/Release/node+0x19bb809)
#5 0x19b9d96 in v8::internal::Builtin_ArrayBufferConstructor(int, unsigned long*, v8::internal::Isolate*) (/home/runner/work/node-v8/node-v8/out/Release/node+0x19b9d96)
#6 0x7fecf5061f35 in v8::internal::wasm::WasmEngine::SyncCompile(v8::internal::Isolate*, v8::internal::wasm::WasmFeatures, v8::internal::wasm::ErrorThrower*, v8::internal::wasm::ModuleWireBytes) (/home/runner/work/node-v8/node-v8/out/Release/node+0x3357f35)
#7 0x7fecf4fc9ece in v8::internal::wasm::TurboshaftGraphBuildingInterface::StringViewWtf8Encode(v8::internal::wasm::WasmFullDecoder<v8::internal::wasm::Decoder::FullValidationTag, v8::internal::wasm::TurboshaftGraphBuildingInterface, (v8::internal::wasm::DecodingMode)0>*, v8::internal::wasm::MemoryIndexImmediate const&, unibrow::Utf8Variant, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value const&, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value const&, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value const&, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value const&, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value*, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value*) (/home/runner/work/node-v8/node-v8/out/Release/node+0x32bfece)
#8 0x7fecf5111850 in v8::internal::wasm::(anonymous namespace)::ExternalReferenceList::ExternalReferenceList() (/home/runner/work/node-v8/node-v8/out/Release/node+0x3407850)
#9 0x7fecf504fefa in v8::internal::wasm::ModuleDisassembler::PrintMemory(v8::internal::wasm::WasmMemory const&) (/home/runner/work/node-v8/node-v8/out/Release/node+0x3345efa)
#10 0x7fecf4fcd97b in v8::internal::wasm::TurboshaftGraphBuildingInterface::ArrayCopy(v8::internal::wasm::WasmFullDecoder<v8::internal::wasm::Decoder::FullValidationTag, v8::internal::wasm::TurboshaftGraphBuildingInterface, (v8::internal::wasm::DecodingMode)0>*, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value const&, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value const&, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value const&, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value const&, v8::internal::wasm::ArrayIndexImmediate const&, v8::internal::wasm::TurboshaftGraphBuildingInterface::Value const&) (/home/runner/work/node-v8/node-v8/out/Release/node+0x32c397b)
#11 0x7fecf514dd22 in v8::internal::Assembler::movsxwq(v8::internal::Register, v8::internal::Register) (/home/runner/work/node-v8/node-v8/out/Release/node+0x3443d22)
#12 0x7fecf4fccf1d in v8::internal::wasm::TurboshaftGraphBuildingInterface::ArrayCopy(v8::internal::wasm::WasmFullDecoder<v8::internal::wasm::Decoder::FullValidationTag, v8::internal::wasm::TurboshaftGraphBuildingInterface, (v8::internal::wasm::DecodingMode)0>*, v8::internal::wasm::TurboshaftGraphBuildingInterf
===
=== 2 tests failed
===
Failed tests:
out/Release/node --no-warnings --test-reporter=spec --test-reporter-destination=stdout --test-reporter=./tools/github_reporter/index.js --test-reporter-destination=stdout /home/runner/work/node-v8/node-v8/test/parallel/test-blob-buffer-too-large.js
out/Release/node --test-reporter=spec --test-reporter-destination=stdout --test-reporter=./tools/github_reporter/index.js --test-reporter-destination=stdout /home/runner/work/node-v8/node-v8/test/parallel/test-buffer-slow.js
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
targos commentedon Sep 27, 2023
The problem happens when we try to create a Buffer with length
buffer.kMaxLength, which is now equal to2 ** 53 - 1.targos commentedon Sep 27, 2023
0x10000000000is2 ** 40(1 TB if I'm not mistaken). Is this a fixed limit of ASAN? What can we do about it?targos commentedon Sep 27, 2023
@nodejs/cpp-reviewers
bnoordhuis commentedon Sep 27, 2023
I'd disable that second test but the first one only allocates 2^32-1 bytes though.
targos commentedon Sep 28, 2023
The first test is updated to allocate more in nodejs/node#49876 (canary includes that PR)
bnoordhuis commentedon Sep 28, 2023
Ah, okay.
2**53-1is larger than reasonable (most x86_64 cpus only have 48 address lines after all) so I'd tweak the tests to not allocate so much. Maybe we should also consider changingBuffer.kMaxLengthto something more reasonable.targos commentedon Sep 28, 2023
Is it reasonable to use the same limit as ASAN?
bnoordhuis commentedon Sep 28, 2023
I'd say so. 1 TB is still pretty big.
targos commentedon Sep 28, 2023
Can you help me with C++? I'd like to change the
kMaxLengthconstant to something equivalent toMath.min(v8::Uint8Array::kMaxLength, 0x10000000000).node-v8/src/node_buffer.h
Line 32 in fe8cd53
bnoordhuis commentedon Sep 28, 2023
I think you should be able to write it like this:
src: limit Buffer::kMaxLength to 1TB
targos commentedon Sep 28, 2023
Thanks. I opened nodejs/node#49930 with the change.
src: limit Buffer::kMaxLength to 1TB
src: limit Buffer::kMaxLength to 1TB
targos commentedon Oct 2, 2023
Unfortunately nodejs/node#49930 doesn't really fix it:
And introduces more issues, because the artificial limit doesn't apply to V8 typed arrays.
For example, on macOS, the system lets us create a huge typed array (larger than the available RAM), and then it crashes later inside V8 when it tries to do a
memmove.See https://github.com/nodejs/node-v8/actions/runs/6369126692/job/17289078649, https://github.com/nodejs/node-v8/actions/runs/6369126697/job/17289078666, https://github.com/nodejs/node-v8/actions/runs/6369126701/job/17289078755
src: limit Buffer::kMaxLength to 1TB
src: limit Buffer::kMaxLength to 1TB
src: limit Buffer::kMaxLength to 1TB
src: limit Buffer::kMaxLength to 1TB
src: limit Buffer::kMaxLength to 1TB
src: limit Buffer::kMaxLength to 1TB
src: limit Buffer::kMaxLength to 1TB
src: limit Buffer::kMaxLength to 1TB
src: limit Buffer::kMaxLength to 1TB
targos commentedon Jan 4, 2024
Resolved in nodejs/node#50115