<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/141434>141434</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Offload] Segmentation fault when calling `olGetDeviceInfoSize` for host device name
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
leandrolcampos
</td>
</tr>
</table>
<pre>
A segmentation fault occurs when calling `olGetDeviceInfoSize` to retrieve the size of the device name for the host device.
The crash happens specifically when `olGetDeviceInfoSize` is called with `OL_DEVICE_INFO_NAME` for the host device handle.
**Steps to Reproduce:**
1. Compile the C++ code snippet provided below using Clang and linking against the LLVMOffload library.
```bash
$ clang++ -std=c++17 host.cpp -I"$LLVM_HOME/include" -L"$LLVM_HOME/lib" -lLLVMOffload -ldl -lpthread -Wl,-rpath,"$LLVM_HOME/lib" -o host
```
2. Execute the compiled program:
```bash
$ ./host
```
3. Observe the output.
**Program Output:**
```bash
Getting the storage size of the device name...
Segmentation fault (core dumped)
```
**Code Snippet:**
```cpp
#include <iostream>
#include <offload/OffloadAPI.h>
#include <string>
ol_device_handle_t getHostDevice() {
static ol_device_handle_t HostDevice = nullptr;
if (!HostDevice) {
olIterateDevices(
[](ol_device_handle_t D, void *Data) {
ol_platform_handle_t Platform;
olGetDeviceInfo(D, OL_DEVICE_INFO_PLATFORM, sizeof(Platform),
&Platform);
ol_platform_backend_t Backend;
olGetPlatformInfo(Platform, OL_PLATFORM_INFO_BACKEND, sizeof(Backend),
&Backend);
if (Backend == OL_PLATFORM_BACKEND_HOST) {
*(static_cast<ol_device_handle_t *>(Data)) = D;
return false;
}
return true;
},
&HostDevice);
}
return HostDevice;
}
int main() {
olInit();
auto HostDevice = getHostDevice();
if (HostDevice == nullptr) {
std::cout << "Host device not found." << std::endl;
return 1;
}
std::cout << "Getting the storage size of the device name..." << std::endl;
size_t Size = 0;
olGetDeviceInfoSize(HostDevice, OL_DEVICE_INFO_NAME, &Size);
std::cout << "Getting the device name..." << std::endl;
std::string Name(Size, '\0');
olGetDeviceInfo(HostDevice, OL_DEVICE_INFO_NAME, Size, Name.data());
Name.pop_back();
std::cout << "Device name: " << Name << std::endl;
olShutDown();
return 0;
}
```
**Environment:**
* LLVM version: Custom build from git
* LLVM Project Commit Hash: `1e4841881ef89aeee77cbf081de42af376bfa3fb`
* Operating System: Ubuntu 24.04.2 LTS (WSL2)
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUV1tz6jgS_jXipQuXkbk-8EC4TFKbE1JDduaRku021o6QXJJMNvPrt9oywRAyew5FFVjd-vrrm9QWzsmDRpyz0QMbrXqi9qWxc4VC59aoTBwr43qpyT_mC3B4OKL2wkujoRC18mCyrLYO3kvUkAmlpD4AG8dG_YZ-hSeZ4ZMuzE7-jWwcgzdg0VuJJwRfIjj5N4Ipmv95ow1aHBEKY5u10jjfCiIWL1i8eCsRMitcCaWoKtQOXIWZLCQZ_wg8vrcvXUMSc3iXviTF7fN-tf7jabneP71stvuXxY81Kd4hAKXQuTrzYJy-O4-VI69-x8qavM6QJa0oqA0igKU5VlIFh5eMPzD-AJnJEZyWVYUeKmtOMsccUlTmHWpHQVwqoQ8gdA5K6r9oRRyE1M43OM_Pf_zYFoUyguSpFfaDiAEAORW-qXDleY0PISPA1nzf-Zwlqyw8DiaNn1FWVdB_YpwzPiQD-8ftjzXjG6kzVefIOIf-81exkmkjUl1SfZUr6KvKlxbp8U_F-LJvK-FLxpffg5iGCtH-9IPFCx4BrP-LWe1DGLMQ0pxCd7DiSFH_Z-8jxjf3kJMIYJs6tG1FmtpXtb9K8muwAdtGdJXgG2O_ofeUqaa0vbHi8G2JRxHZ2H1tKManmbEIeX2sMGd81rXTpbWkEtqFErpLKquqRjlp8wcsWUrjvEUK2PqLzITUMb5pk7h4fYrKe5rOW6kPrSReGLUPnu1Di-w9HNA_Gtd2IONTxmfAJg9NQhz5m8GdXZctwJIV6FqpyluWPAQ7ALKABmzQBb8gAxj15NEKj0HoSDtImkJozjjGp3dsrxhfwsnIHBhfrIQX18DhY9S-UsIXxh4vO1_blcATbo4exqcN9M1B8_q8eNtsf_9BIioRUzA-_UTiM2oSKlU-7i4m39NJRfYX6nzv4SH869I5Y7SELpANrzOXwOxhsfzX-mV1RewM2eXVWbsk6PwJiWpVKJmUz66p1sr-cbt7uxdp6toF49NQLPtMOE8l-jVvpJasKcohZw1YsoLVbbCArp7aUp8ph7dSNlnd-tCqe1vfaJNuCMMn1fFVQZ7VO6AtWEctBO2sIbWHo5D6pleMetLSh8VOmEXtzW233Gm5M4-QjWv9boNdxb-5GhYsWWSm9tTtLFkC4_yxcxVq46Ewtc4jOrRbnc-NqHN1iVjr-eBOUL4z9Yvn6P-hQDv3HmgGaAIVnwX3hoRumO60bTMfcCI5DuqdrPyMN7_I_LwYDlx4EUdiGCwT9oSNljH9XHL99fj5KYfOmGQiyptWmoZuOgM3kspUzUnzpSK_c351cZgldG58ekx4_-B968yurP3KvOvrgm5rKr5qonuX5FqfpDWaLtmrO5IvmhEKTmidNJqoLWvnzRHSWqocCmuOcJD-c4Jo9V-t-Q9mnma6o_TwSPd-0kwUAxxOh4PpdIDFdCYQcTLJ0iKeDnIcclEkk3FaiKRIW4J8AduKbirK6-7DeaQhBv6d1trXwIdRPIw4PL_tqHP_3D1zxme9fJ7ks2QmejgfTIZTPhgnk3GvnCdpMkFMOJ_NBvkg42IsskRMJzOcjjMxiXtyzmM-ikd8xJNkloyjMeIAJ3GRjsZFnOOMDWM8CqkipU7HyNhDTzpX43wwHAyTYU-JFJVr3hE41_gOjZSmuNGqZ-e0qZ_WB8eGsZLOuwuMl141LxftTMFGK7gz9fzk-wON5d2RnMqqV1s1L72vXJPhDeObg_RlnUaZOdJkqU7nn34V0kczLTngGN-0Hp7m_H8BAAD__yh74CY">