Mesa (main): r300: fixes for UB caused by left shifts
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Oct 13 04:30:30 UTC 2021
Module: Mesa
Branch: main
Commit: fab1ad1a110eeadb3a913c5421875707735e7f2e
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=fab1ad1a110eeadb3a913c5421875707735e7f2e
Author: Filip Gawin <filip.gawin at zoho.com>
Date: Tue Oct 12 13:53:52 2021 +0200
r300: fixes for UB caused by left shifts
r300_vs.c:252:37: runtime error: left shift of negative value -1
r300_state.c:1824:66: runtime error: left shift of 63112 by 16 places
cannot be represented in type 'int'
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13308>
---
src/gallium/drivers/r300/r300_state.c | 2 +-
src/gallium/drivers/r300/r300_state_derived.c | 2 +-
src/gallium/drivers/r300/r300_vs.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/gallium/drivers/r300/r300_state.c b/src/gallium/drivers/r300/r300_state.c
index 747d6f90eb2..07299bb0b75 100644
--- a/src/gallium/drivers/r300/r300_state.c
+++ b/src/gallium/drivers/r300/r300_state.c
@@ -1821,7 +1821,7 @@ static void r300_vertex_psc(struct r300_vertex_element_state *velems)
if (i & 1) {
vstream->vap_prog_stream_cntl[i >> 1] |= type << 16;
- vstream->vap_prog_stream_cntl_ext[i >> 1] |= swizzle << 16;
+ vstream->vap_prog_stream_cntl_ext[i >> 1] |= (uint32_t)swizzle << 16;
} else {
vstream->vap_prog_stream_cntl[i >> 1] |= type;
vstream->vap_prog_stream_cntl_ext[i >> 1] |= swizzle;
diff --git a/src/gallium/drivers/r300/r300_state_derived.c b/src/gallium/drivers/r300/r300_state_derived.c
index 92f895e4d72..0e1ab4c940f 100644
--- a/src/gallium/drivers/r300/r300_state_derived.c
+++ b/src/gallium/drivers/r300/r300_state_derived.c
@@ -168,7 +168,7 @@ static void r300_swtcl_vertex_psc(struct r300_context *r300)
/* Add the attribute to the PSC table. */
if (i & 1) {
vstream->vap_prog_stream_cntl[i >> 1] |= type << 16;
- vstream->vap_prog_stream_cntl_ext[i >> 1] |= swizzle << 16;
+ vstream->vap_prog_stream_cntl_ext[i >> 1] |= (uint32_t)swizzle << 16;
} else {
vstream->vap_prog_stream_cntl[i >> 1] |= type;
vstream->vap_prog_stream_cntl_ext[i >> 1] |= swizzle;
diff --git a/src/gallium/drivers/r300/r300_vs.c b/src/gallium/drivers/r300/r300_vs.c
index 62152714d20..96d6c4386ae 100644
--- a/src/gallium/drivers/r300/r300_vs.c
+++ b/src/gallium/drivers/r300/r300_vs.c
@@ -249,7 +249,7 @@ void r300_translate_vertex_shader(struct r300_context *r300,
compiler.Base.remove_unused_constants = TRUE;
}
- compiler.RequiredOutputs = ~(~0 << (vs->info.num_outputs + 1));
+ compiler.RequiredOutputs = ~(~0U << (vs->info.num_outputs + 1));
compiler.SetHwInputOutput = &set_vertex_inputs_outputs;
/* Insert the WPOS output. */
More information about the mesa-commit
mailing list