Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 28 additions & 12 deletions src/runtime_src/core/common/drv/kds_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1951,13 +1951,21 @@ int kds_ip_layout2cu_info(struct ip_layout *ip_layout,
/* ip_data->m_name format "<kernel name>:<instance name>",
* where instance name is so called CU name.
*/
strncpy(kname, ip->m_name, sizeof(kname));
kname[sizeof(kname)-1] = '\0';
size_t src_len = strlen(ip->m_name);
size_t len = src_len < sizeof(kname) - 1 ? src_len : sizeof(kname) - 1;
memcpy(kname, ip->m_name, len);
kname[len] = '\0';
kname_p = &kname[0];
strncpy(info.kname, strsep(&kname_p, ":"), sizeof(info.kname));
info.kname[sizeof(info.kname)-1] = '\0';
strncpy(info.iname, strsep(&kname_p, ":"), sizeof(info.iname));
info.iname[sizeof(info.kname)-1] = '\0';
char *str1 = strsep(&kname_p, ":");
src_len = strlen(str1);
len = src_len < sizeof(info.kname) - 1 ? src_len : sizeof(info.kname) - 1;
memcpy(info.kname, str1, len);
info.kname[len] = '\0';
char *str2 = strsep(&kname_p, ":");
src_len = strlen(str2);
len = src_len < sizeof(info.iname) - 1 ? src_len : sizeof(info.iname) - 1;
memcpy(info.iname, str2, len);
info.iname[len] = '\0';

info.addr = ip->m_base_address;
info.intr_enable = ip->properties & IP_INT_ENABLE_MASK;
Expand Down Expand Up @@ -2050,13 +2058,21 @@ int kds_ip_layout2scu_info(struct ip_layout *ip_layout, struct xrt_cu_info cu_in
/* ip_data->m_name format "<kernel name>:<instance name>",
* where instance name is so called CU name.
*/
strncpy(kname, ip->m_name, sizeof(kname));
kname[sizeof(kname)-1] = '\0';
size_t src_len = strlen(ip->m_name);
size_t len = src_len < sizeof(kname) - 1 ? src_len : sizeof(kname) - 1;
memcpy(kname, ip->m_name, len);
kname[len] = '\0';
kname_p = &kname[0];
strncpy(info.kname, strsep(&kname_p, ":"), sizeof(info.kname));
info.kname[sizeof(info.kname)-1] = '\0';
strncpy(info.iname, strsep(&kname_p, ":"), sizeof(info.iname));
info.iname[sizeof(info.kname)-1] = '\0';
char *str1 = strsep(&kname_p, ":");
src_len = strlen(str1);
len = src_len < sizeof(info.kname) - 1 ? src_len : sizeof(info.kname) - 1;
memcpy(info.kname, str1, len);
info.kname[len] = '\0';
char *str2 = strsep(&kname_p, ":");
src_len = strlen(str2);
len = src_len < sizeof(info.iname) - 1 ? src_len : sizeof(info.iname) - 1;
memcpy(info.iname, str2, len);
info.iname[len] = '\0';

info.addr = 0;
info.intr_enable = 0;
Expand Down
4 changes: 3 additions & 1 deletion src/runtime_src/core/edge/common_em/unix_socket.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,9 @@ void unix_socket::start_server(const std::string sk_desc)
}
server.sun_family = AF_UNIX;
//Coverity
strncpy(server.sun_path, sk_desc.c_str(),STR_MAX_LEN);
auto len = std::min(sk_desc.size(), sizeof(server.sun_path) - 1);
memcpy(server.sun_path, sk_desc.c_str(), len);
server.sun_path[len] = '\0';
if (connect(sock, (struct sockaddr*)&server, sizeof(server)) >= 0){
fd = sock;
server_started = true;
Expand Down
33 changes: 21 additions & 12 deletions src/runtime_src/core/edge/user/shim.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -759,8 +759,9 @@ xclLoadAxlf(const axlf *buffer)
auto krnl = reinterpret_cast<kernel_info *>(axlf_obj.za_kernels + off);
if (kernel.name.size() > sizeof(krnl->name))
return -EINVAL;
std::strncpy(krnl->name, kernel.name.c_str(), sizeof(krnl->name)-1);
krnl->name[sizeof(krnl->name)-1] = '\0';
auto len = std::min(kernel.name.size(), sizeof(krnl->name) - 1);
std::memcpy(krnl->name, kernel.name.c_str(), len);
krnl->name[len] = '\0';
krnl->range = kernel.range;
krnl->anums = kernel.args.size();
krnl->features = 0;
Expand All @@ -773,8 +774,9 @@ xclLoadAxlf(const axlf *buffer)
xclLog(XRT_ERROR, "%s: Argument name length %d>%d", __func__, arg.name.size(), sizeof(krnl->args[ai].name));
return -EINVAL;
}
std::strncpy(krnl->args[ai].name, arg.name.c_str(), sizeof(krnl->args[ai].name)-1);
krnl->args[ai].name[sizeof(krnl->args[ai].name)-1] = '\0';
auto arg_len = std::min(arg.name.size(), sizeof(krnl->args[ai].name) - 1);
std::memcpy(krnl->args[ai].name, arg.name.c_str(), arg_len);
krnl->args[ai].name[arg_len] = '\0';
krnl->args[ai].offset = arg.offset;
krnl->args[ai].size = arg.size;
// XCLBIN doesn't define argument direction yet and it only support
Expand Down Expand Up @@ -942,7 +944,9 @@ xclGetDebugIPlayoutPath(char* layoutPath, size_t size)
std::string path = xclGetSysfsPath("debug_ip_layout");
if (path.size() >= size)
return -EINVAL;
std::strncpy(layoutPath, path.c_str(), size);
auto len = std::min(path.size(), size - 1);
std::memcpy(layoutPath, path.c_str(), len);
layoutPath[len] = '\0';
return 0;
}

Expand Down Expand Up @@ -1142,8 +1146,9 @@ open_cu_context(const xrt_core::hwctx_handle* hwctx_hdl, const std::string& cuna
drm_zocl_open_cu_ctx cu_ctx = {};
cu_ctx.flags = flags;
cu_ctx.hw_context = hwctx_hdl->get_slotidx();
std::strncpy(cu_ctx.cu_name, cuname.c_str(), sizeof(cu_ctx.cu_name));
cu_ctx.cu_name[sizeof(cu_ctx.cu_name) - 1] = 0;
auto cu_len = std::min(cuname.size(), sizeof(cu_ctx.cu_name) - 1);
std::memcpy(cu_ctx.cu_name, cuname.c_str(), cu_len);
cu_ctx.cu_name[cu_len] = '\0';
if (ioctl(mKernelFD, DRM_IOCTL_ZOCL_OPEN_CU_CTX, &cu_ctx))
throw xrt_core::system_error(errno, "Failed to open cu context");

Expand Down Expand Up @@ -1255,8 +1260,9 @@ int shim::prepare_hw_axlf(const axlf *buffer, struct drm_zocl_axlf *axlf_obj,
auto krnl = reinterpret_cast<kernel_info *>(axlf_obj->za_kernels + off);
if (kernel.name.size() > sizeof(krnl->name))
return -EINVAL;
std::strncpy(krnl->name, kernel.name.c_str(), sizeof(krnl->name)-1);
krnl->name[sizeof(krnl->name)-1] = '\0';
auto krnl_len = std::min(kernel.name.size(), sizeof(krnl->name) - 1);
std::memcpy(krnl->name, kernel.name.c_str(), krnl_len);
krnl->name[krnl_len] = '\0';
krnl->range = kernel.range;
krnl->anums = kernel.args.size();

Expand All @@ -1270,8 +1276,9 @@ int shim::prepare_hw_axlf(const axlf *buffer, struct drm_zocl_axlf *axlf_obj,
xclLog(XRT_ERROR, "%s: Argument name length %d>%d", __func__, arg.name.size(), sizeof(krnl->args[ai].name));
return -EINVAL;
}
std::strncpy(krnl->args[ai].name, arg.name.c_str(), sizeof(krnl->args[ai].name)-1);
krnl->args[ai].name[sizeof(krnl->args[ai].name)-1] = '\0';
auto krnl_arg_len = std::min(arg.name.size(), sizeof(krnl->args[ai].name) - 1);
std::memcpy(krnl->args[ai].name, arg.name.c_str(), krnl_arg_len);
krnl->args[ai].name[krnl_arg_len] = '\0';
krnl->args[ai].offset = arg.offset;
krnl->args[ai].size = arg.size;
// XCLBIN doesn't define argument direction yet and it only support
Expand Down Expand Up @@ -2691,7 +2698,9 @@ xclGetSysfsPath(xclDeviceHandle handle, const char* subdev,
if (path.size() >= size)
return -EINVAL;

std::strncpy(sysfsPath, path.c_str(), size);
auto sysfs_len = std::min(path.size(), size - 1);
std::memcpy(sysfsPath, path.c_str(), sysfs_len);
sysfsPath[sysfs_len] = '\0';
return 0;
}

Expand Down
10 changes: 6 additions & 4 deletions src/runtime_src/core/pcie/windows/alveo/shim.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -721,8 +721,9 @@ struct shim

if (kernel.name.size() > sizeof(krnl->name))
return 1;
std::strncpy(krnl->name, kernel.name.c_str(), sizeof(krnl->name)-1);
krnl->name[sizeof(krnl->name)-1] = '\0';
auto len = std::min(kernel.name.size(), sizeof(krnl->name) - 1);
std::memcpy(krnl->name, kernel.name.c_str(), len);
krnl->name[len] = '\0';
krnl->anums = kernel.args.size();
krnl->range = kernel.range;

Expand All @@ -734,8 +735,9 @@ struct shim
send(xrt_core::message::severity_level::error, "XRT", "Argument name length invalid.");
return 1;
}
std::strncpy(krnl->args[ai].name, arg.name.c_str(), sizeof(krnl->args[ai].name)-1);
krnl->args[ai].name[sizeof(krnl->args[ai].name)-1] = '\0';
auto arg_len = std::min(arg.name.size(), sizeof(krnl->args[ai].name) - 1);
std::memcpy(krnl->args[ai].name, arg.name.c_str(), arg_len);
krnl->args[ai].name[arg_len] = '\0';
krnl->args[ai].offset = arg.offset;
krnl->args[ai].size = arg.size;
// XCLBIN doesn't define argument direction yet and it only support
Expand Down
10 changes: 3 additions & 7 deletions src/runtime_src/hip/api/hip_device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,6 @@
#include <mutex>
#include <string>

#ifdef _WIN32
// to disable the compiler worning C4996: 'strncpy': This function or variable may be unsafe
# pragma warning( disable : 4996)
#endif

// forward declaration
namespace xrt::core::hip {
// Defined first so it is initialized before the global x below (same
Expand Down Expand Up @@ -134,8 +129,9 @@ hip_get_device_properties(hipDeviceProp_t* props, hipDevice_t device)
// Query device name using rom_vbnv
// Copy device name to device_props.name, ensuring no buffer overflow
auto name_str = (xrt_core::device_query<xrt_core::query::rom_vbnv>(device_handle));
std::strncpy(device_props.name, name_str.c_str(), sizeof(device_props.name) - 1);
device_props.name[sizeof(device_props.name) - 1] = '\0';
auto len = std::min(name_str.size(), sizeof(device_props.name) - 1);
std::memcpy(device_props.name, name_str.c_str(), len);
device_props.name[len] = '\0';
// Extract and assign PCI domain, bus, and device IDs from the queried PCIe BDF tuple
device_props.pciDomainID = std::get<0>(uuid);
device_props.pciBusID = std::get<1>(uuid);
Expand Down
Loading