From 4d8bf011d5360a5a6a6c8fa7c1f003ded384b928 Mon Sep 17 00:00:00 2001 From: Nisarg Bhavsar Date: Tue, 22 Mar 2022 11:54:35 -0700 Subject: [PATCH] disp: msm: sde: address static analysis issues Avoid various possible nullptr dereferences and check validity of index before accessing arrays. Addresses issues highlighted by static analysis. Change-Id: I5abfbc8c4cacb56e9decc3a6339ab0fa3a63b606 Signed-off-by: Nisarg Bhavsar --- msm/sde/sde_crtc.c | 2 ++ msm/sde/sde_encoder.c | 10 ++++------ msm/sde/sde_vbif.c | 3 +++ 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/msm/sde/sde_crtc.c b/msm/sde/sde_crtc.c index ef29f3524f..58af700b36 100644 --- a/msm/sde/sde_crtc.c +++ b/msm/sde/sde_crtc.c @@ -2982,6 +2982,8 @@ void sde_crtc_complete_commit(struct drm_crtc *crtc, SDE_EVT32_VERBOSE(DRMID(crtc)); sde_kms = _sde_crtc_get_kms(crtc); + if (!sde_kms) + return; for (i = 0; i < MAX_DSI_DISPLAYS; i++) { splash_display = &sde_kms->splash_data.splash_display[i]; diff --git a/msm/sde/sde_encoder.c b/msm/sde/sde_encoder.c index c6218427d2..c1f05323f2 100644 --- a/msm/sde/sde_encoder.c +++ b/msm/sde/sde_encoder.c @@ -227,14 +227,9 @@ static void _sde_encoder_control_fal10_veto(struct drm_encoder *drm_enc, bool ve struct sde_kms *sde_kms = sde_encoder_get_kms(drm_enc); struct sde_encoder_virt *sde_enc = to_sde_encoder_virt(drm_enc); - if (sde_kms->catalog && !sde_kms->catalog->uidle_cfg.uidle_rev) + if (!sde_kms || !sde_kms->hw_uidle || !sde_kms->hw_uidle->ops.uidle_fal10_override) return; - if (!sde_kms->hw_uidle || !sde_kms->hw_uidle->ops.uidle_fal10_override) { - SDE_ERROR("invalid args\n"); - return; - } - /* * clone mode is the only scenario where we want to enable software override * of fal10 veto. @@ -4166,6 +4161,9 @@ static void sde_encoder_early_wakeup_work_handler(struct kthread_work *work) struct sde_encoder_virt, early_wakeup_work); struct sde_kms *sde_kms = to_sde_kms(ddev_to_msm_kms(sde_enc->base.dev)); + if (!sde_kms) + return; + sde_vm_lock(sde_kms); if (!sde_vm_owns_hw(sde_kms)) { sde_vm_unlock(sde_kms); diff --git a/msm/sde/sde_vbif.c b/msm/sde/sde_vbif.c index cb210f8f51..141018c7de 100644 --- a/msm/sde/sde_vbif.c +++ b/msm/sde/sde_vbif.c @@ -49,6 +49,9 @@ static bool _sde_vbif_setup_clk_supported(struct sde_kms *sde_kms, enum sde_clk_ bool supported = false; bool has_split_vbif = test_bit(SDE_FEATURE_VBIF_CLK_SPLIT, sde_kms->catalog->features); + if (!SDE_CLK_CTRL_VALID(clk_ctrl)) + return false; + if ((has_split_vbif && VBIF_CLK_CLIENT(clk_ctrl).ops.setup_clk_force_ctrl) || (!has_split_vbif && sde_kms->hw_mdp->ops.setup_clk_force_ctrl)) supported = true;