v3dv: assert job->cmd_buffer is valid
authorJuan A. Suarez Romero <jasuarez@igalia.com>
Wed, 21 Jul 2021 17:29:49 +0000 (19:29 +0200)
committerMarge Bot <eric+marge@anholt.net>
Mon, 26 Jul 2021 07:28:37 +0000 (07:28 +0000)
In v3dv_write_uniforms_wg_offsets() function, the job's cmd_buffer is a
valid command buffer, so there is no reason to check if its NULL or not.

This fixes CID#1487441 ("Dereference after null check") error.

v1:
 - `job->cmd_buffer` is the same as `cmd_buffer` (Alejandro)

v2:
 - Use `cmd_buffer` instead of `job->cmd_buffer` (Iago)

Fixes: 31a786c80ad ("v3dv: handle QUNIFORM_FB_LAYERS")
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11999>

src/broadcom/vulkan/v3dv_uniforms.c

index 7b1f3ed..d97d3b2 100644 (file)
@@ -401,6 +401,7 @@ v3dv_write_uniforms_wg_offsets(struct v3dv_cmd_buffer *cmd_buffer,
 
    struct v3dv_job *job = cmd_buffer->state.job;
    assert(job);
+   assert(job->cmd_buffer == cmd_buffer);
 
    struct texture_bo_list tex_bos = { 0 };
    struct state_bo_list state_bos = { 0 };
@@ -510,11 +511,10 @@ v3dv_write_uniforms_wg_offsets(struct v3dv_cmd_buffer *cmd_buffer,
          uint32_t num_layers;
          if (job->frame_tiling.layers != 0) {
             num_layers = job->frame_tiling.layers;
-         } else if (job->cmd_buffer &&
-                  job->cmd_buffer->state.framebuffer) {
-            num_layers = job->cmd_buffer->state.framebuffer->layers;
+         } else if (cmd_buffer->state.framebuffer) {
+            num_layers = cmd_buffer->state.framebuffer->layers;
          } else {
-            assert(job->cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_SECONDARY);
+            assert(cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_SECONDARY);
             num_layers = 2048;
 #if DEBUG
             fprintf(stderr, "Skipping gl_LayerID shader sanity check for "