From c506ec3604b8d454dcea64bc52e544ec2bc29125 Mon Sep 17 00:00:00 2001 From: Rakesh Roy Date: Mon, 20 Feb 2023 18:05:51 +0530 Subject: [PATCH] SWDEV-377782 - Fix segmentation fault for hipLaunchKernel - If fat binary doesn't contain code object for current gfx then inside FatBinaryInfo::ExtractFatBinary(), valid FatBinaryDeviceInfo address isn't stored in vector fatbin_dev_info_ - This raises segmentation fault during hipLaunchKernel Change-Id: I21017338d91edbd5d9cc2d37277f66558198a129 [ROCm/clr commit: 348698ed300f8fe6dc98e17e4d57e4a5f2107fb4] --- projects/clr/hipamd/src/hip_fatbin.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/projects/clr/hipamd/src/hip_fatbin.cpp b/projects/clr/hipamd/src/hip_fatbin.cpp index bafc74362d..c2b7ff75b9 100644 --- a/projects/clr/hipamd/src/hip_fatbin.cpp +++ b/projects/clr/hipamd/src/hip_fatbin.cpp @@ -23,13 +23,15 @@ FatBinaryInfo::FatBinaryInfo(const char* fname, const void* image) : fdesc_(amd: fname_ = std::string(); } - fatbin_dev_info_.resize(g_devices.size()); + fatbin_dev_info_.resize(g_devices.size(), nullptr); } FatBinaryInfo::~FatBinaryInfo() { - for (auto& fbd: fatbin_dev_info_) { - delete fbd; + for (auto* fbd: fatbin_dev_info_) { + if (fbd != nullptr) { + delete fbd; + } } if (fdesc_ > 0) { @@ -298,6 +300,10 @@ hipError_t FatBinaryInfo::AddDevProgram(const int device_id) { DeviceIdCheck(device_id); FatBinaryDeviceInfo* fbd_info = fatbin_dev_info_[device_id]; + if (fbd_info == nullptr) { + return hipErrorInvalidKernelFile; + } + // If fat binary was already added, skip this step and return success if (fbd_info->add_dev_prog_ == false) { amd::Context* ctx = g_devices[device_id]->asContext();