Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fd52e44f authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: mdss: Free allocated layer pp_info when scalar copy fails"

parents 73a8f1ac dedb8df7
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -4063,7 +4063,7 @@ static int mdss_fb_atomic_commit_ioctl(struct fb_info *info,
		goto err;
	} else if (layer_count) {
		buffer_size = sizeof(struct mdp_input_layer) * layer_count;
		layer_list = kmalloc(buffer_size, GFP_KERNEL);
		layer_list = kzalloc(buffer_size, GFP_KERNEL);
		if (!layer_list) {
			pr_err("unable to allocate memory for layers\n");
			ret = -ENOMEM;
@@ -4080,6 +4080,7 @@ static int mdss_fb_atomic_commit_ioctl(struct fb_info *info,

		for (i = 0; i < layer_count; i++) {
			layer = &layer_list[i];
			scale = NULL;

			if (!(layer->flags & MDP_LAYER_PP)) {
				layer->pp_info = NULL;
@@ -4097,10 +4098,11 @@ static int mdss_fb_atomic_commit_ioctl(struct fb_info *info,
				continue;
			}

			scale = kmalloc(sizeof(struct mdp_scale_data),
			scale = kzalloc(sizeof(struct mdp_scale_data),
				GFP_KERNEL);
			if (!scale) {
				pr_err("unable to allocate memory for overlays\n");
				mdss_mdp_free_layer_pp_info(layer);
				ret = -ENOMEM;
				goto err;
			}
@@ -4111,6 +4113,8 @@ static int mdss_fb_atomic_commit_ioctl(struct fb_info *info,
				pr_err("layer list copy from user failed, scale = %p\n",
						layer->scale);
				kfree(scale);
				scale = NULL;
				mdss_mdp_free_layer_pp_info(layer);
				ret = -EFAULT;
				goto err;
			}
@@ -4141,6 +4145,7 @@ static int mdss_fb_atomic_commit_ioctl(struct fb_info *info,
err:
	for (i--; i >= 0; i--) {
		kfree(layer_list[i].scale);
		layer_list[i].scale = NULL;
		mdss_mdp_free_layer_pp_info(&layer_list[i]);
	}
	kfree(layer_list);
+3 −2
Original line number Diff line number Diff line
@@ -6560,8 +6560,8 @@ exit_pp_info:

void mdss_mdp_free_layer_pp_info(struct mdp_input_layer *layer)
{
	struct mdp_overlay_pp_params *pp_info =
		(struct mdp_overlay_pp_params *) layer->pp_info;
	struct mdp_overlay_pp_params *pp_info = (layer) ?
		(struct mdp_overlay_pp_params *) layer->pp_info : NULL;

	if (!pp_info)
		return;
@@ -6571,6 +6571,7 @@ void mdss_mdp_free_layer_pp_info(struct mdp_input_layer *layer)
	kfree(pp_info->pa_v2_cfg_data.cfg_payload);
	kfree(pp_info->pcc_cfg_data.cfg_payload);
	kfree(pp_info);
	layer->pp_info = NULL;
}

int mdss_mdp_mfd_valid_dspp(struct msm_fb_data_type *mfd)