소스 검색

disp: msm: sde: add parameters checks to improve code quality

Add more parameter check including NULL pointer check, buffer
access bonds check etc.

Change-Id: I8d2a4967bed8750c206bc6d265205b257fc999c3
Signed-off-by: Yu Wu <[email protected]>
Yu Wu 2 년 전
부모
커밋
59b4bc2772
3개의 변경된 파일10개의 추가작업 그리고 5개의 파일을 삭제
  1. 1 1
      msm/sde/sde_crtc.c
  2. 8 3
      msm/sde/sde_encoder.c
  3. 1 1
      msm/sde/sde_encoder_phys_cmd.c

+ 1 - 1
msm/sde/sde_crtc.c

@@ -7382,7 +7382,7 @@ static ssize_t _sde_debugfs_hw_fence_features_mask_wr(struct file *file,
 {
 	struct sde_crtc *sde_crtc;
 	u32 bit, enable;
-	char buf[10];
+	char buf[30];
 
 	if (!file || !file->private_data)
 		return -EINVAL;

+ 8 - 3
msm/sde/sde_encoder.c

@@ -1612,7 +1612,7 @@ static void sde_encoder_control_te(struct sde_encoder_virt *sde_enc, bool enable
 		return;
 	}
 
-	for (i = 0; i < sde_enc->num_phys_encs; i++) {
+	for (i = 0; i < sde_enc->num_phys_encs && i < ARRAY_SIZE(sde_enc->phys_encs); i++) {
 		phys = sde_enc->phys_encs[i];
 		if (phys && phys->ops.control_te)
 			phys->ops.control_te(phys, enable);
@@ -2102,6 +2102,11 @@ int sde_encoder_handle_dma_fence_out_of_order(struct drm_encoder *drm_enc)
 	int i, fence_status = 0, pending_kickoff_cnt = 0, rc = 0;
 	ktime_t time_stamp;
 
+	if (!drm_enc) {
+		SDE_ERROR("invalid encoder\n");
+		return false;
+	}
+
 	crtc = drm_enc->crtc;
 	sde_crtc = to_sde_crtc(crtc);
 	cstate = to_sde_crtc_state(crtc->state);
@@ -2211,7 +2216,7 @@ int sde_encoder_hw_fence_error_handle(struct drm_encoder *drm_enc)
 		SDE_EVT32(DRMID(phys_enc->parent), rc, SDE_EVTLOG_ERROR);
 	}
 
-	if (!phys_enc->sde_kms && !phys_enc->sde_kms->dev && !phys_enc->sde_kms->dev->dev_private) {
+	if (!phys_enc->sde_kms || !phys_enc->sde_kms->dev || !phys_enc->sde_kms->dev->dev_private) {
 		SDE_EVT32(DRMID(drm_enc), SDE_EVTLOG_ERROR);
 		return -EINVAL;
 	}
@@ -4438,7 +4443,7 @@ static void _sde_encoder_kickoff_phys(struct sde_encoder_virt *sde_enc,
 	sde_crtc = to_sde_crtc(sde_enc->crtc);
 
 	/* reset input fence status and skip flush for fence error case. */
-	if (sde_crtc->input_fence_status < 0) {
+	if (sde_crtc && sde_crtc->input_fence_status < 0) {
 		if (!sde_encoder_in_clone_mode(&sde_enc->base))
 			sde_crtc->input_fence_status = 0;
 

+ 1 - 1
msm/sde/sde_encoder_phys_cmd.c

@@ -1308,7 +1308,7 @@ static void _get_tearcheck_cfg(struct sde_encoder_phys *phys_enc,
 	struct msm_mode_info *info = &sde_enc->mode_info;
 	struct drm_display_mode *mode = &phys_enc->cached_mode;
 	enum sde_rm_qsync_modes qsync_mode;
-	ktime_t qsync_time_ns, default_time_ns, default_line_time_ns, ept_time_ns;
+	ktime_t qsync_time_ns, default_time_ns, default_line_time_ns, ept_time_ns = 0;
 	ktime_t extra_time_ns = 0, ept_extra_time_ns = 0, qsync_l_bound_ns, qsync_u_bound_ns;
 	u32 threshold_lines, ept_threshold_lines = 0, yres;
 	u32 default_fps, qsync_min_fps = 0, ept_fps = 0;