drm:msm:dsi: Add check for max controller count
Add check for max controller count while iterating through display ctrl structure to avoid out of bounds access. Change-Id: If4d32c648e7d34591726286226600a92a357479a Signed-off-by: Vishnuvardhan Prodduturi <vproddut@codeaurora.org>
This commit is contained in:
@@ -3839,7 +3839,7 @@ static int dsi_display_update_dsi_bitrate(struct dsi_display *display,
|
|||||||
|
|
||||||
display->config.bit_clk_rate_hz = bit_clk_rate;
|
display->config.bit_clk_rate_hz = bit_clk_rate;
|
||||||
|
|
||||||
for (i = 0; i < display->ctrl_count; i++) {
|
display_for_each_ctrl(i, display) {
|
||||||
struct dsi_display_ctrl *dsi_disp_ctrl = &display->ctrl[i];
|
struct dsi_display_ctrl *dsi_disp_ctrl = &display->ctrl[i];
|
||||||
struct dsi_ctrl *ctrl = dsi_disp_ctrl->ctrl;
|
struct dsi_ctrl *ctrl = dsi_disp_ctrl->ctrl;
|
||||||
u32 num_of_lanes = 0, bpp;
|
u32 num_of_lanes = 0, bpp;
|
||||||
@@ -3967,8 +3967,7 @@ static int _dsi_display_dyn_update_clks(struct dsi_display *display,
|
|||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; (i < display->ctrl_count) &&
|
display_for_each_ctrl(i, display) {
|
||||||
(i < MAX_DSI_CTRLS_PER_DISPLAY); i++) {
|
|
||||||
ctrl = &display->ctrl[i];
|
ctrl = &display->ctrl[i];
|
||||||
if (!ctrl->ctrl)
|
if (!ctrl->ctrl)
|
||||||
continue;
|
continue;
|
||||||
@@ -3986,8 +3985,7 @@ static int _dsi_display_dyn_update_clks(struct dsi_display *display,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; (i < display->ctrl_count) &&
|
display_for_each_ctrl(i, display) {
|
||||||
(i < MAX_DSI_CTRLS_PER_DISPLAY); i++) {
|
|
||||||
ctrl = &display->ctrl[i];
|
ctrl = &display->ctrl[i];
|
||||||
if (ctrl == m_ctrl)
|
if (ctrl == m_ctrl)
|
||||||
continue;
|
continue;
|
||||||
@@ -3996,8 +3994,7 @@ static int _dsi_display_dyn_update_clks(struct dsi_display *display,
|
|||||||
dsi_phy_dynamic_refresh_trigger(m_ctrl->phy, true);
|
dsi_phy_dynamic_refresh_trigger(m_ctrl->phy, true);
|
||||||
|
|
||||||
/* wait for dynamic refresh done */
|
/* wait for dynamic refresh done */
|
||||||
for (i = 0; (i < display->ctrl_count) &&
|
display_for_each_ctrl(i, display) {
|
||||||
(i < MAX_DSI_CTRLS_PER_DISPLAY); i++) {
|
|
||||||
ctrl = &display->ctrl[i];
|
ctrl = &display->ctrl[i];
|
||||||
rc = dsi_ctrl_wait4dynamic_refresh_done(ctrl->ctrl);
|
rc = dsi_ctrl_wait4dynamic_refresh_done(ctrl->ctrl);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
@@ -4009,8 +4006,7 @@ static int _dsi_display_dyn_update_clks(struct dsi_display *display,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; (i < display->ctrl_count) &&
|
display_for_each_ctrl(i, display) {
|
||||||
(i < MAX_DSI_CTRLS_PER_DISPLAY); i++) {
|
|
||||||
ctrl = &display->ctrl[i];
|
ctrl = &display->ctrl[i];
|
||||||
dsi_phy_dynamic_refresh_clear(ctrl->phy);
|
dsi_phy_dynamic_refresh_clear(ctrl->phy);
|
||||||
}
|
}
|
||||||
@@ -4025,8 +4021,7 @@ static int _dsi_display_dyn_update_clks(struct dsi_display *display,
|
|||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
recover_pix_clk:
|
recover_pix_clk:
|
||||||
for (i = 0; (i < display->ctrl_count) &&
|
display_for_each_ctrl(i, display) {
|
||||||
(i < MAX_DSI_CTRLS_PER_DISPLAY); i++) {
|
|
||||||
ctrl = &display->ctrl[i];
|
ctrl = &display->ctrl[i];
|
||||||
if (!ctrl->ctrl)
|
if (!ctrl->ctrl)
|
||||||
continue;
|
continue;
|
||||||
@@ -4035,8 +4030,7 @@ recover_pix_clk:
|
|||||||
}
|
}
|
||||||
|
|
||||||
recover_byte_clk:
|
recover_byte_clk:
|
||||||
for (i = 0; (i < display->ctrl_count) &&
|
display_for_each_ctrl(i, display) {
|
||||||
(i < MAX_DSI_CTRLS_PER_DISPLAY); i++) {
|
|
||||||
ctrl = &display->ctrl[i];
|
ctrl = &display->ctrl[i];
|
||||||
if (!ctrl->ctrl)
|
if (!ctrl->ctrl)
|
||||||
continue;
|
continue;
|
||||||
|
Reference in New Issue
Block a user