Skip to content

Memory poisoning failure for allocations on a device #634

@PatKamin

Description

@PatKamin

Environment Information

  • UMF version (hash commit or a tag): main
  • compiler, libraries, and other related tools version(s): clang-15, possibly other compilers

Please provide a reproduction of the bug:

  • Build Unified Runtime with L0 and ASan enabled
  • Run fuzztest which allocates memory on a GPU device

How often bug is revealed:

always
(always, often, rare)

Actual behavior:

AddressSanitizer: CHECK failed: asan_mapping.h:359 "((AddrIsInMem(p))) != (0)" (0x0, 0x0)
#0 0x55c51330ce81 in __asan::CheckUnwind() asan_rtl.cpp.o
#1 0x55c513325814 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (unified-runtime/build/bin/fuzztest-base+0x165814) (BuildId: b0932a052df3ffbe6c2d5a2e30dfccfbe77ef111)
#2 0x55c51330590c in __asan::ShadowSegmentEndpoint::ShadowSegmentEndpoint(unsigned long) (unified-runtime/build/bin/fuzztest-base+0x14590c) (BuildId: b0932a052df3ffbe6c2d5a2e30dfccfbe77ef111)
#3 0x55c5133056d8 in __asan_poison_memory_region (unified-runtime/build/bin/fuzztest-base+0x1456d8) (BuildId: b0932a052df3ffbe6c2d5a2e30dfccfbe77ef111)
#4 0x7fa8fa7928b4 in utils_annotate_memory_inaccessible(void*, unsigned long) unified-runtime/build/_deps/unified-memory-framework-src/src/utils/utils_sanitizers.h:162:5
#5 0x7fa8fa78495a in memoryProviderAlloc(umf_memory_provider_t*, unsigned long, unsigned long) unified-runtime/build/_deps/unified-memory-framework-src/src/pool/pool_disjoint.cpp:403:5
#6 0x7fa8fa784228 in Slab::Slab(Bucket&) unified-runtime/build/_deps/unified-memory-framework-src/src/pool/pool_disjoint.cpp:441:14
#7 0x7fa8fa79bb40 in std::__detail::_MakeUniq<Slab>::__single_object std::make_unique<Slab, Bucket&>(Bucket&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/unique_ptr.h:1065:34
#8 0x7fa8fa78c5a0 in Bucket::getAvailSlab(bool&) unified-runtime/build/_deps/unified-memory-framework-src/src/pool/pool_disjoint.cpp:637:41
#9 0x7fa8fa78ce16 in Bucket::getChunk(bool&) unified-runtime/build/_deps/unified-memory-framework-src/src/pool/pool_disjoint.cpp:660:19
#10 0x7fa8fa7911f9 in DisjointPool::AllocImpl::allocate(unsigned long, unsigned long, bool&) unified-runtime/build/_deps/unified-memory-framework-src/src/pool/pool_disjoint.cpp:889:22
#11 0x7fa8fa79450d in DisjointPool::aligned_malloc(unsigned long, unsigned long) unified-runtime/build/_deps/unified-memory-framework-src/src/pool/pool_disjoint.cpp:1043:22
#12 0x7fa8fa7b9b5c in auto umf_memory_pool_ops_t umf::detail::poolOpsBase<DisjointPool>()::'lambda1'(void*, auto...)::operator()<unsigned long, unsigned long>(void*, auto...) const unified-runtime/build/_deps/unified-memory-framework-src/src/pool/../cpp_helpers.hpp:74:5
#13 0x7fa8fa7b9aec in auto umf_memory_pool_ops_t umf::detail::poolOpsBase<DisjointPool>()::'lambda1'(void*, auto...)::__invoke<unsigned long, unsigned long>(void*, auto...) unified-runtime/build/_deps/unified-memory-framework-src/src/pool/../cpp_helpers.hpp:74:5
#14 0x7fa8fd093921 in umfPoolAlignedMalloc unified-runtime/build/_deps/unified-memory-framework-src/src/memory_pool.c:12
#15 0x7fa8fa44f6b3 in urUSMDeviceAlloc unified-runtime/source/adapters/level_zero/usm.cpp:426:13

Expected behavior:

CHECK passes.

Details

We need a way to determine in Disjoint Pool whether the allocation is made on a host memory or a device memory. In cases of allocations made on a host memory, we can enable memory poison/unpoison.

Additional information about Priority and Help Requested:

Are you willing to submit a pull request with a proposed change? Yes (Yes, No)

Requested priority: High (Showstopper, High, Medium, Low)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions