Skip to content

Commit 454d59a

Browse files
authored
[UR] check for dlsym errors and valid pfnGet (#20869)
two small fixes for Coverity / ASAN: * check for dlerror after dlsym * check for platform.dditable.Adapter.pfnGet before call
1 parent 666693d commit 454d59a

File tree

3 files changed

+46
-3
lines changed

3 files changed

+46
-3
lines changed

unified-runtime/scripts/templates/ldrddi.cpp.mako

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,13 @@ namespace ur_loader
5656
if (platform.initStatus != ${X}_RESULT_SUCCESS)
5757
continue;
5858

59+
auto *${th.make_pfn_name(n, tags, obj)} = platform.dditable.${th.get_table_name(n, tags, obj)}.${th.make_pfn_name(n, tags, obj)};
60+
if (*${th.make_pfn_name(n, tags, obj)} == nullptr)
61+
return ${X}_RESULT_ERROR_UNINITIALIZED;
62+
5963
uint32_t adapter;
6064
ur_adapter_handle_t *adapterHandle = numAdapters < NumEntries ? &${obj['params'][1]['name']}[numAdapters] : nullptr;
61-
platform.dditable.${th.get_table_name(n, tags, obj)}.${th.make_pfn_name(n, tags, obj)}( 1, adapterHandle, &adapter );
65+
${th.make_pfn_name(n, tags, obj)}( 1, adapterHandle, &adapter );
6266

6367
numAdapters += adapter;
6468
}
@@ -129,6 +133,7 @@ ${tbl['export']['name']}(
129133

130134
if(platform.initStatus != ${X}_RESULT_SUCCESS)
131135
continue;
136+
132137
auto getTable = reinterpret_cast<${tbl['pfn']}>(
133138
ur_loader::LibLoader::getFunctionPtr(platform.handle.get(), "${tbl['export']['name']}"));
134139
if(!getTable)

unified-runtime/source/common/linux/ur_lib_loader.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,16 @@ LibLoader::loadAdapterLibrary(const char *name) {
7878
}
7979

8080
void *LibLoader::getFunctionPtr(HMODULE handle, const char *func_name) {
81-
return dlsym(handle, func_name);
81+
// Clear any existing error
82+
dlerror();
83+
84+
void *ptr = dlsym(handle, func_name);
85+
const char *err = dlerror();
86+
if (err) {
87+
UR_LOG(ERR, "dlsym failed to load function '{}': {}", func_name, err);
88+
}
89+
90+
return ptr;
8291
}
8392

8493
} // namespace ur_loader

unified-runtime/source/loader/ur_ldrddi.cpp

Lines changed: 30 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)