amd/common: Fix various non-critical integer overflows
authorTony Wasserka <tony.wasserka@gmx.de>
Wed, 2 Sep 2020 17:15:01 +0000 (19:15 +0200)
committerMarge Bot <eric+marge@anholt.net>
Thu, 3 Sep 2020 20:20:24 +0000 (20:20 +0000)
The result of 0xf << 28 is a signed integer and hence overflows into the sign
bit. In practice compilers did the right thing here, since the intent of the
code was unsigned arithmetic anyway.

Cc: mesa-stable
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6568>

src/amd/common/ac_shader_util.c

index eabde97348e76a4453f24e5ef33c810581278fe6..d4ccf38d803f2d6d6af5f468f73d13e620f6540d 100644 (file)
@@ -64,7 +64,7 @@ ac_get_cb_shader_mask(unsigned spi_shader_col_format)
                        cb_shader_mask |= 0x3 << (i * 4);
                        break;
                case V_028714_SPI_SHADER_32_AR:
-                       cb_shader_mask |= 0x9 << (i * 4);
+                       cb_shader_mask |= 0x9u << (i * 4);
                        break;
                case V_028714_SPI_SHADER_FP16_ABGR:
                case V_028714_SPI_SHADER_UNORM16_ABGR:
@@ -72,7 +72,7 @@ ac_get_cb_shader_mask(unsigned spi_shader_col_format)
                case V_028714_SPI_SHADER_UINT16_ABGR:
                case V_028714_SPI_SHADER_SINT16_ABGR:
                case V_028714_SPI_SHADER_32_ABGR:
-                       cb_shader_mask |= 0xf << (i * 4);
+                       cb_shader_mask |= 0xfu << (i * 4);
                        break;
                default:
                        assert(0);