radv: skip zero-sized memcpy
authorRhys Perry <pendingchaos02@gmail.com>
Wed, 27 Sep 2023 11:51:15 +0000 (12:51 +0100)
committerMarge Bot <emma+marge@anholt.net>
Mon, 23 Oct 2023 22:16:26 +0000 (22:16 +0000)
Fixes UBSan:
src/amd/vulkan/radv_pipeline.c:1181:4: runtime error: null pointer passed as argument 2, which is declared to never be null
src/amd/vulkan/radv_shader.c:2243:4: runtime error: null pointer passed as argument 2, which is declared to never be null

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25432>

src/amd/vulkan/radv_pipeline.c
src/amd/vulkan/radv_shader.c

index 9766f322ec80c0c912ca6f8d3c42d46c7ca241c1..d18f5b04875b3633ca5b8fc74154774307670ab3 100644 (file)
@@ -1178,7 +1178,8 @@ radv_copy_shader_stage_create_info(struct radv_device *device, uint32_t stageCou
    if (!new_stages)
       return NULL;
 
-   memcpy(new_stages, pStages, size);
+   if (size)
+      memcpy(new_stages, pStages, size);
 
    for (uint32_t i = 0; i < stageCount; i++) {
       RADV_FROM_HANDLE(vk_shader_module, module, new_stages[i].module);
index a82d7a3b2116c2b01e249a897978611a2b972fbb..df770f6a26762911af9f5e15b9bcd2e63ad837a1 100644 (file)
@@ -2249,8 +2249,10 @@ radv_aco_build_shader_binary(void **bin, const struct ac_shader_config *config,
    legacy_binary->disasm_size = 0;
    legacy_binary->ir_size = llvm_ir_size;
 
-   memcpy((char *)legacy_binary->data + legacy_binary->stats_size + legacy_binary->code_size, llvm_ir_str,
-          llvm_ir_size);
+   if (llvm_ir_size) {
+      memcpy((char *)legacy_binary->data + legacy_binary->stats_size + legacy_binary->code_size, llvm_ir_str,
+             llvm_ir_size);
+   }
 
    legacy_binary->disasm_size = disasm_size;
    if (disasm_size) {