Module: Mesa Branch: main Commit: 99214f048193f97fd4bc2dc0483d796b7a0f18d2 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=99214f048193f97fd4bc2dc0483d796b7a0f18d2
Author: Rhys Perry <[email protected]> Date: Wed Sep 27 12:51:15 2023 +0100 radv: skip zero-sized memcpy 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 <[email protected]> Reviewed-by: Samuel Pitoiset <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25432> --- src/amd/vulkan/radv_pipeline.c | 3 ++- src/amd/vulkan/radv_shader.c | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index 9766f322ec8..d18f5b04875 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -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); diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index a82d7a3b211..df770f6a267 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -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) {
