diff options
author | Marek Olšák <marek.olsak@amd.com> | 2020-11-03 23:15:41 -0500 |
---|---|---|
committer | Marek Olšák <marek.olsak@amd.com> | 2021-01-04 19:22:33 -0500 |
commit | 641dd03f15a876c23513a5eaaeee5275f041b5dc (patch) | |
tree | cd56854e0ebb76adb9584deba9629d68bdf6ccde | |
parent | ecac89b732f5871b87c51ae601dd60a1eafd5886 (diff) |
mesa: fix an overflow check for MultiDrawElements
Reviewed-by: Zoltán Böszörményi <zboszor@gmail.com>
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7679>
-rw-r--r-- | src/mesa/main/draw.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/mesa/main/draw.c b/src/mesa/main/draw.c index 215d0dfff1b..915c24b6fac 100644 --- a/src/mesa/main/draw.c +++ b/src/mesa/main/draw.c @@ -1277,8 +1277,11 @@ _mesa_validated_multidrawelements(struct gl_context *ctx, GLenum mode, } if (ctx->Const.MultiDrawWithUserIndices) { - /* Check whether prim[i].start would overflow. */ - if (((max_index_ptr - min_index_ptr) >> ib.index_size_shift) > UINT_MAX) + /* "max_index_ptr - min_index_ptr >> index_size_shift" is stored + * in prims[i].start. The driver will multiply it later by index_size + * so make sure the final value won't overflow. + */ + if (max_index_ptr - min_index_ptr > UINT32_MAX) fallback = true; } else { /* If the index buffer isn't in a VBO, then treating the application's |