From 106bf59ca903bd58c0bd2a9c5eff6b4180df0b24 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Michel=20D=C3=A4nzer?= Date: Thu, 12 Mar 2020 15:03:20 +0100 Subject: [PATCH] llvmpipe: Use uintptr_t for pointer values MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Instead of uint64_t. Fixes potentially writing beyond the end of the handles pointer array on 32-bit architectures (and copying all 0s instead of the computed pointer values to the array on big endian ones). Corresponding compiler warning: ../src/gallium/drivers/llvmpipe/lp_state_cs.c: In function ‘llvmpipe_set_global_binding’: ../src/gallium/drivers/llvmpipe/lp_state_cs.c:1312:12: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 1312 | va = (uint64_t)((char *)lp_res->data + offset); | ^ Fixes: 264663d55d32 "gallivm/llvmpipe: add support for global operations." Reviewed-by: Roland Scheidegger Part-of: --- src/gallium/drivers/llvmpipe/lp_state_cs.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/llvmpipe/lp_state_cs.c b/src/gallium/drivers/llvmpipe/lp_state_cs.c index 92e156b4111..b57e1068a06 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_cs.c +++ b/src/gallium/drivers/llvmpipe/lp_state_cs.c @@ -1304,12 +1304,12 @@ llvmpipe_set_global_binding(struct pipe_context *pipe, } for (i = 0; i < count; i++) { - uint64_t va; + uintptr_t va; uint32_t offset; pipe_resource_reference(&cs->global_buffers[first + i], resources[i]); struct llvmpipe_resource *lp_res = llvmpipe_resource(resources[i]); offset = *handles[i]; - va = (uint64_t)((char *)lp_res->data + offset); + va = (uintptr_t)((char *)lp_res->data + offset); memcpy(handles[i], &va, sizeof(va)); } } -- 2.30.2