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) Signed-off-by: Tomeu Vizoso <tomeu.viz...@collabora.com> Cc: etna...@lists.freedesktop.org Cc: Marek Olšák <marek.ol...@amd.com> Fixes: 330d0607ed60 ("gallium: remove pipe_index_buffer and set_index_buffer") --- src/gallium/drivers/etnaviv/etnaviv_context.c | 36 +++++++++++++++------------ 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/gallium/drivers/etnaviv/etnaviv_context.c b/src/gallium/drivers/etnaviv/etnaviv_context.c index 306cb6fc498d..dcda4088bfd5 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_context.c +++ b/src/gallium/drivers/etnaviv/etnaviv_context.c @@ -178,24 +178,28 @@ 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) { - 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) { + 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 && !ctx->index_buffer.FE_INDEX_STREAM_BASE_ADDR.bo) { - BUG("Unsupported or no index buffer"); - return; + if (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 (!ctx->index_buffer.FE_INDEX_STREAM_BASE_ADDR.bo) { + BUG("Unsupported or no index buffer"); + return; + } } struct etna_shader_key key = {}; -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev