From ae2784b83232548d62eb488e82a3a4315de50300 Mon Sep 17 00:00:00 2001 From: Emma Anholt Date: Thu, 20 Apr 2023 14:57:41 -0700 Subject: [PATCH] blob: Don't valgrind assert for defined memory if we aren't writing. The VK pipeline cache passes a NULL bytes with a nonzero size to a NULL-data blob to set up the size of the blob. In this case, we don't actually execute the memcpy, so the non-existent "bytes" doesn't need to have defined contents. Avoids a valgrind warning: ==972858== Unaddressable byte(s) found during client check request ==972858== at 0x147F4166: blob_write_bytes (blob.c:165) ==972858== by 0x147F4166: blob_write_bytes (blob.c:158) ==972858== by 0x14695FFF: vk_pipeline_cache_object_serialize (vk_pipeline_cache.c:240) [...] ==972858== Address 0x0 is not stack'd, malloc'd or (recently) free'd Fixes: 591da9877900 ("vulkan: Add a common VkPipelineCache implementation") Reviewed-by: Mike Blumenkrantz Part-of: --- src/util/blob.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/util/blob.c b/src/util/blob.c index b293df9c5df..a42e4a41e75 100644 --- a/src/util/blob.c +++ b/src/util/blob.c @@ -160,10 +160,10 @@ blob_write_bytes(struct blob *blob, const void *bytes, size_t to_write) if (! grow_to_fit(blob, to_write)) return false; - VG(VALGRIND_CHECK_MEM_IS_DEFINED(bytes, to_write)); - - if (blob->data && to_write > 0) + if (blob->data && to_write > 0) { + VG(VALGRIND_CHECK_MEM_IS_DEFINED(bytes, to_write)); memcpy(blob->data + blob->size, bytes, to_write); + } blob->size += to_write; return true;