From 1bcf9c5da9aa48ddae45b84d1b06cd0f7e5b64bb Mon Sep 17 00:00:00 2001 From: "Juan A. Suarez Romero" Date: Wed, 26 Jun 2024 10:36:42 +0200 Subject: [PATCH] v3d: do not pass NULL pointer to function not expecting NULLs memcpy() pointers arguments are declared to be non NULL. This has been detected by Undefined Behaviour Sanitizer (UBSan). Reviewed-by: Iago Toral Quiroga Signed-off-by: Juan A. Suarez Romero Part-of: --- src/gallium/drivers/v3d/v3d_program.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/gallium/drivers/v3d/v3d_program.c b/src/gallium/drivers/v3d/v3d_program.c index ebad549b33d..fe8ea54a22c 100644 --- a/src/gallium/drivers/v3d/v3d_program.c +++ b/src/gallium/drivers/v3d/v3d_program.c @@ -800,8 +800,10 @@ v3d_update_compiled_gs(struct v3d_context *v3d, uint8_t prim_mode) /* The last bin-mode shader in the geometry pipeline only outputs * varyings used by transform feedback. */ - memcpy(key->used_outputs, uncompiled->tf_outputs, - sizeof(*key->used_outputs) * uncompiled->num_tf_outputs); + if (uncompiled->num_tf_outputs > 0) { + memcpy(key->used_outputs, uncompiled->tf_outputs, + sizeof(*key->used_outputs) * uncompiled->num_tf_outputs); + } if (uncompiled->num_tf_outputs < key->num_used_outputs) { uint32_t size = sizeof(*key->used_outputs) * (key->num_used_outputs - @@ -907,9 +909,11 @@ v3d_update_compiled_vs(struct v3d_context *v3d, uint8_t prim_mode) * gl_Position or TF outputs. */ if (!v3d->prog.bind_gs) { - memcpy(key->used_outputs, shader_state->tf_outputs, - sizeof(*key->used_outputs) * - shader_state->num_tf_outputs); + if (shader_state->num_tf_outputs > 0) { + memcpy(key->used_outputs, shader_state->tf_outputs, + sizeof(*key->used_outputs) * + shader_state->num_tf_outputs); + } if (shader_state->num_tf_outputs < key->num_used_outputs) { uint32_t tail_bytes = sizeof(*key->used_outputs) *