Adjust the implementation of strncpy_s() for Linux

This change:
- prevents writing memory out of the range of the destination buffer
- prevents calling strlen() with non-null terminated c-string
- corrects the logic, which validates passed range to proceed
when real length fits the destination buffer

Related-To: NEO-7264
Signed-off-by: Wrobel, Patryk <patryk.wrobel@intel.com>
This commit is contained in:
Wrobel, Patryk
2022-08-17 15:46:39 +00:00
committed by Compute-Runtime-Automation
parent 5bdf758049
commit dda5b19859
8 changed files with 88 additions and 71 deletions

View File

@@ -140,7 +140,7 @@ ze_result_t DriverHandleImp::getExtensionProperties(uint32_t *pCount,
for (uint32_t i = 0; i < *pCount; i++) {
auto extension = this->extensionsSupported[i];
strncpy_s(pExtensionProperties[i].name, ZE_MAX_EXTENSION_NAME,
extension.first.c_str(), extension.first.length() + 1);
extension.first.c_str(), extension.first.length());
pExtensionProperties[i].version = extension.second;
}

View File

@@ -474,9 +474,9 @@ ze_result_t KernelImp::getSourceAttributes(uint32_t *pSize, char **pString) {
if (pString == nullptr) {
*pSize = (uint32_t)desc.kernelMetadata.kernelLanguageAttributes.length() + 1;
} else {
strncpy_s(*pString, desc.kernelMetadata.kernelLanguageAttributes.length() + 1,
strncpy_s(*pString, *pSize,
desc.kernelMetadata.kernelLanguageAttributes.c_str(),
desc.kernelMetadata.kernelLanguageAttributes.length() + 1);
desc.kernelMetadata.kernelLanguageAttributes.length());
}
return ZE_RESULT_SUCCESS;
}
@@ -721,7 +721,8 @@ ze_result_t KernelImp::getKernelName(size_t *pSize, char *pName) {
*pSize = std::min(*pSize, kernelNameSize);
strncpy_s(pName, *pSize,
this->kernelImmData->getDescriptor().kernelMetadata.kernelName.c_str(), kernelNameSize);
this->kernelImmData->getDescriptor().kernelMetadata.kernelName.c_str(),
this->kernelImmData->getDescriptor().kernelMetadata.kernelName.size());
return ZE_RESULT_SUCCESS;
}