Module: Mesa
Branch: master
Commit: 106b2786b66d1400899718ba98ce1d5311b8e712
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=106b2786b66d1400899718ba98ce1d5311b8e712

Author: Tomeu Vizoso <tomeu.viz...@collabora.com>
Date:   Fri May 19 12:40:44 2017 +0200

etnaviv: Don't try to use the index buffer if size is zero

If info->index_size is zero, info->index will point to uninitialized
memory.

Fatal signal 11 (SIGSEGV), code 2, fault addr 0xab5d07a3 in tid 20456 
(surfaceflinger)

lst: Remove useless indexbuf conditional in the index_size != 0 case.

Fixes: 330d0607ed60 ("gallium: remove pipe_index_buffer and set_index_buffer")
Signed-off-by: Tomeu Vizoso <tomeu.viz...@collabora.com>
Reviewed-by: Lucas Stach <l.st...@pengutronix.de>

---

 src/gallium/drivers/etnaviv/etnaviv_context.c | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/src/gallium/drivers/etnaviv/etnaviv_context.c 
b/src/gallium/drivers/etnaviv/etnaviv_context.c
index 306cb6fc49..e7590954c7 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_context.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_context.c
@@ -178,24 +178,26 @@ etna_draw_vbo(struct pipe_context *pctx, const struct 
pipe_draw_info *info)
 
    /* Upload a user index buffer. */
    unsigned index_offset = 0;
-   struct pipe_resource *indexbuf = info->has_user_indices ? NULL : 
info->index.resource;
-   if (info->index_size && info->has_user_indices &&
-       !util_upload_index_buffer(pctx, info, &indexbuf, &index_offset)) {
-      BUG("Index buffer upload failed.");
-      return;
-   }
+   struct pipe_resource *indexbuf = NULL;
+
+   if (info->index_size) {
+      indexbuf = info->has_user_indices ? NULL : info->index.resource;
+      if (info->has_user_indices &&
+          !util_upload_index_buffer(pctx, info, &indexbuf, &index_offset)) {
+         BUG("Index buffer upload failed.");
+         return;
+      }
 
-   if (info->index_size && indexbuf) {
       ctx->index_buffer.FE_INDEX_STREAM_BASE_ADDR.bo = 
etna_resource(indexbuf)->bo;
       ctx->index_buffer.FE_INDEX_STREAM_BASE_ADDR.offset = index_offset;
       ctx->index_buffer.FE_INDEX_STREAM_BASE_ADDR.flags = ETNA_RELOC_READ;
       ctx->index_buffer.FE_INDEX_STREAM_CONTROL = 
translate_index_size(info->index_size);
       ctx->dirty |= ETNA_DIRTY_INDEX_BUFFER;
-   }
 
-   if (info->index_size && !ctx->index_buffer.FE_INDEX_STREAM_BASE_ADDR.bo) {
-      BUG("Unsupported or no index buffer");
-      return;
+      if (!ctx->index_buffer.FE_INDEX_STREAM_BASE_ADDR.bo) {
+         BUG("Unsupported or no index buffer");
+         return;
+      }
    }
 
    struct etna_shader_key key = {};

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to