From c923eff742b83cc475d02ad57c538754db991c06 Mon Sep 17 00:00:00 2001 From: Karmjit Mahil Date: Fri, 8 Nov 2024 16:15:30 +0100 Subject: [PATCH] tu: Fix potential alloc of 0 size We can end up calling vk_multialloc_alloc with 0 size when `attachment_count` is 0 and `clearValueCount` is 0. Addressed: ``` Direct leak of 1 byte(s) in 1 object(s) allocated from: #0 0x7faf033ee0 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:145 #1 0x7fada5cc10 in vk_default_alloc ../src/vulkan/util/vk_alloc.c:26 #2 0x7fac50b270 in vk_alloc ../src/vulkan/util/vk_alloc.h:48 #3 0x7fac555040 in vk_multialloc_alloc ../src/vulkan/util/vk_alloc.h:234 #4 0x7fac555040 in void tu_CmdBeginRenderPass2<(chip)7>(VkCommandBuffer_T*, VkRenderPassBeginInfo const*, VkSubpassBeginInfo const*) ../src/freedreno/vulkan/tu_cmd_buffer.cc:4634 #5 0x7fac900760 in vk_common_CmdBeginRenderPass ../src/vulkan/runtime/vk_render_pass.c:261 ``` seen in: dEQP-VK.robustness.robustness2.bind.notemplate.r32i.dontunroll.nonvolatile.uniform_texel_buffer.no_fmt_qual.len_252.samples_1.1d.frag Fixes: 4cfd021e3f7 ("turnip: Save the renderpass's clear values in the cmdbuf state.") Signed-off-by: Karmjit Mahil Part-of: --- src/freedreno/vulkan/tu_cmd_buffer.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/freedreno/vulkan/tu_cmd_buffer.cc b/src/freedreno/vulkan/tu_cmd_buffer.cc index a370d3dfaa2..1dd69b2e44f 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.cc +++ b/src/freedreno/vulkan/tu_cmd_buffer.cc @@ -4651,8 +4651,8 @@ tu_CmdBeginRenderPass2(VkCommandBuffer commandBuffer, const struct tu_image_view *, pass->attachment_count); vk_multialloc_add(&ma, &cmd->state.clear_values, VkClearValue, pRenderPassBegin->clearValueCount); - if (!vk_multialloc_alloc(&ma, &cmd->vk.pool->alloc, - VK_SYSTEM_ALLOCATION_SCOPE_OBJECT)) { + if (ma.size && !vk_multialloc_alloc(&ma, &cmd->vk.pool->alloc, + VK_SYSTEM_ALLOCATION_SCOPE_OBJECT)) { vk_command_buffer_set_error(&cmd->vk, VK_ERROR_OUT_OF_HOST_MEMORY); return; }