A division by zero may occur in the dsi_get_phy_params function if
phy_req_kHz is in the range [1000000, 1500000]. In this case,
dsi_calc_phy_rate can return a value greater than 1000000, which sets
the 'ui' variable to zero. The variable is then used as the denominator
in the ROUND macro.

This patch adds an additional check of phy_rate_kHz to prevent 'ui'
from being zero.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: f819b0d4a913 ("drm/hisilicon: Add designware dsi encoder driver")
Signed-off-by: Pavel Zhigulin <[email protected]>
---
 drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c 
b/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
index e80debdc4176..7502a9ddbbf5 100644
--- a/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
+++ b/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
@@ -251,7 +251,7 @@ static void dsi_get_phy_params(u32 phy_req_kHz,
        memset(phy, 0, sizeof(*phy));

        phy_rate_kHz = dsi_calc_phy_rate(phy_req_kHz, phy);
-       if (!phy_rate_kHz)
+       if (!phy_rate_kHz || phy_rate_kHz > 1000000)
                return;

        ui = 1000000 / phy_rate_kHz;
--
2.43.0

Reply via email to