diff --git a/projects/clr/rocclr/device/rocm/rocdevice.cpp b/projects/clr/rocclr/device/rocm/rocdevice.cpp index e7e836bce7..28714eda23 100644 --- a/projects/clr/rocclr/device/rocm/rocdevice.cpp +++ b/projects/clr/rocclr/device/rocm/rocdevice.cpp @@ -2201,7 +2201,10 @@ bool Device::SetSvmAttributesInt(const void* dev_ptr, size_t count, amd::MemoryAdvice advice, bool first_alloc, bool use_cpu) const { if ((settings().hmmFlags_ & Settings::Hmm::EnableSvmTracking) && !first_alloc) { amd::Memory* svm_mem = amd::MemObjMap::FindMemObj(dev_ptr); - if (nullptr == svm_mem) { + if ((nullptr == svm_mem) || ((svm_mem->getMemFlags() & CL_MEM_ALLOC_HOST_PTR) == 0) || + // Validate the range of provided memory + ((svm_mem->getSize() - (reinterpret_cast(dev_ptr) - + reinterpret_cast
(svm_mem->getSvmPtr()))) < count)) { LogPrintfError("SetSvmAttributes received unknown memory for update: %p!", dev_ptr); return false; } @@ -2278,7 +2281,10 @@ bool Device::GetSvmAttributes(void** data, size_t* data_sizes, int* attributes, size_t num_attributes, const void* dev_ptr, size_t count) const { if (settings().hmmFlags_ & Settings::Hmm::EnableSvmTracking) { amd::Memory* svm_mem = amd::MemObjMap::FindMemObj(dev_ptr); - if (nullptr == svm_mem) { + if ((nullptr == svm_mem) || ((svm_mem->getMemFlags() & CL_MEM_ALLOC_HOST_PTR) == 0) || + // Validate the range of provided memory + ((svm_mem->getSize() - (reinterpret_cast(dev_ptr) - + reinterpret_cast
(svm_mem->getSvmPtr()))) < count)) { LogPrintfError("GetSvmAttributes received unknown memory %p for state!", dev_ptr); return false; } diff --git a/projects/clr/rocclr/device/rocm/rocsettings.cpp b/projects/clr/rocclr/device/rocm/rocsettings.cpp index 855074c642..b2c0cc772d 100644 --- a/projects/clr/rocclr/device/rocm/rocsettings.cpp +++ b/projects/clr/rocclr/device/rocm/rocsettings.cpp @@ -88,7 +88,7 @@ Settings::Settings() { lcWavefrontSize64_ = true; imageBufferWar_ = false; - hmmFlags_ = (!flagIsDefault(ROC_HMM_FLAGS)) ? ROC_HMM_FLAGS : 0; + hmmFlags_ = (!flagIsDefault(ROC_HMM_FLAGS)) ? ROC_HMM_FLAGS : Hmm::EnableSvmTracking; rocr_backend_ = true; barrier_sync_ = (!flagIsDefault(ROC_BARRIER_SYNC)) ? ROC_BARRIER_SYNC : true;