Fields hdisplay and vdisplay are defined as u16 and their
multiplication causes implicit promotion to signed 32-bit value,
which may overflow and cause undefined behavior.

Prevent possible undefined behavior by explicitly casting one of
the operands to (unsigned int) type.

Fixes: cc4312127108 ("drm/tinydrm/mipi-dbi: Add mipi_dbi_init_with_formats()")
Cc: Noralf Trønnes <nor...@tronnes.org>
Cc: <sta...@vger.kernel.org> # v5.4+
Signed-off-by: Krzysztof Karas <krzysztof.ka...@intel.com>
---
 drivers/gpu/drm/drm_mipi_dbi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_mipi_dbi.c b/drivers/gpu/drm/drm_mipi_dbi.c
index e33c78fc8fbd..536741dd7690 100644
--- a/drivers/gpu/drm/drm_mipi_dbi.c
+++ b/drivers/gpu/drm/drm_mipi_dbi.c
@@ -691,7 +691,7 @@ int mipi_dbi_dev_init(struct mipi_dbi_dev *dbidev,
                      const struct drm_simple_display_pipe_funcs *funcs,
                      const struct drm_display_mode *mode, unsigned int 
rotation)
 {
-       size_t bufsize = mode->vdisplay * mode->hdisplay * sizeof(u16);
+       size_t bufsize = (unsigned int)mode->vdisplay * mode->hdisplay * 
sizeof(u16);
 
        dbidev->drm.mode_config.preferred_depth = 16;
 
-- 
2.34.1


-- 
Best Regards,
Krzysztof

Reply via email to