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

Commit 2c183a17 authored by Sreesudhan Ramakrish Ramkumar's avatar Sreesudhan Ramakrish Ramkumar
Browse files

msm: camera: isp: Add defensive check for io pointers



After calling iounmap, io handles are invalid. This may cause issue
if its used without mapping again. Clear io handle variables after
calling iounmap.

Change-Id: I62c26f5d43d3aa7b775c124838f894649524a664
Signed-off-by: default avatarSreesudhan Ramakrish Ramkumar <srramku@codeaurora.org>
parent d420d8ef
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -122,6 +122,7 @@ static int msm_vfe32_init_hardware(struct vfe_device *vfe_dev)
	return rc;
	return rc;
irq_req_failed:
irq_req_failed:
	iounmap(vfe_dev->vfe_base);
	iounmap(vfe_dev->vfe_base);
	vfe_dev->vfe_base = NULL;
vfe_remap_failed:
vfe_remap_failed:
	if (vfe_dev->vfe_clk_idx == 1)
	if (vfe_dev->vfe_clk_idx == 1)
		msm_cam_clk_enable(&vfe_dev->pdev->dev,
		msm_cam_clk_enable(&vfe_dev->pdev->dev,
@@ -146,6 +147,7 @@ static void msm_vfe32_release_hardware(struct vfe_device *vfe_dev)
	free_irq(vfe_dev->vfe_irq->start, vfe_dev);
	free_irq(vfe_dev->vfe_irq->start, vfe_dev);
	tasklet_kill(&vfe_dev->vfe_tasklet);
	tasklet_kill(&vfe_dev->vfe_tasklet);
	iounmap(vfe_dev->vfe_base);
	iounmap(vfe_dev->vfe_base);
	vfe_dev->vfe_base = NULL;
	if (vfe_dev->vfe_clk_idx == 1)
	if (vfe_dev->vfe_clk_idx == 1)
		msm_cam_clk_enable(&vfe_dev->pdev->dev,
		msm_cam_clk_enable(&vfe_dev->pdev->dev,
				msm_vfe32_1_clk_info, vfe_dev->vfe_clk,
				msm_vfe32_1_clk_info, vfe_dev->vfe_clk,
+4 −0
Original line number Original line Diff line number Diff line
@@ -309,8 +309,10 @@ static int msm_vfe40_init_hardware(struct vfe_device *vfe_dev)
	return rc;
	return rc;
irq_req_failed:
irq_req_failed:
	iounmap(vfe_dev->vfe_vbif_base);
	iounmap(vfe_dev->vfe_vbif_base);
	vfe_dev->vfe_vbif_base = NULL;
vbif_remap_failed:
vbif_remap_failed:
	iounmap(vfe_dev->vfe_base);
	iounmap(vfe_dev->vfe_base);
	vfe_dev->vfe_base = NULL;
vfe_remap_failed:
vfe_remap_failed:
	msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe40_clk_info,
	msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe40_clk_info,
		vfe_dev->vfe_clk, vfe_dev->num_clk, 0);
		vfe_dev->vfe_clk, vfe_dev->num_clk, 0);
@@ -329,7 +331,9 @@ static void msm_vfe40_release_hardware(struct vfe_device *vfe_dev)
	free_irq(vfe_dev->vfe_irq->start, vfe_dev);
	free_irq(vfe_dev->vfe_irq->start, vfe_dev);
	tasklet_kill(&vfe_dev->vfe_tasklet);
	tasklet_kill(&vfe_dev->vfe_tasklet);
	iounmap(vfe_dev->vfe_vbif_base);
	iounmap(vfe_dev->vfe_vbif_base);
	vfe_dev->vfe_vbif_base = NULL;
	iounmap(vfe_dev->vfe_base);
	iounmap(vfe_dev->vfe_base);
	vfe_dev->vfe_base = NULL;
	msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe40_clk_info,
	msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe40_clk_info,
		vfe_dev->vfe_clk, vfe_dev->num_clk, 0);
		vfe_dev->vfe_clk, vfe_dev->num_clk, 0);
	kfree(vfe_dev->vfe_clk);
	kfree(vfe_dev->vfe_clk);
+4 −0
Original line number Original line Diff line number Diff line
@@ -211,8 +211,10 @@ static int msm_vfe44_init_hardware(struct vfe_device *vfe_dev)
	return rc;
	return rc;
irq_req_failed:
irq_req_failed:
	iounmap(vfe_dev->vfe_vbif_base);
	iounmap(vfe_dev->vfe_vbif_base);
	vfe_dev->vfe_vbif_base = NULL;
vbif_remap_failed:
vbif_remap_failed:
	iounmap(vfe_dev->vfe_base);
	iounmap(vfe_dev->vfe_base);
	vfe_dev->vfe_base = NULL;
vfe_remap_failed:
vfe_remap_failed:
	msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe44_clk_info,
	msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe44_clk_info,
		vfe_dev->vfe_clk, vfe_dev->num_clk, 0);
		vfe_dev->vfe_clk, vfe_dev->num_clk, 0);
@@ -231,7 +233,9 @@ static void msm_vfe44_release_hardware(struct vfe_device *vfe_dev)
	free_irq(vfe_dev->vfe_irq->start, vfe_dev);
	free_irq(vfe_dev->vfe_irq->start, vfe_dev);
	tasklet_kill(&vfe_dev->vfe_tasklet);
	tasklet_kill(&vfe_dev->vfe_tasklet);
	iounmap(vfe_dev->vfe_vbif_base);
	iounmap(vfe_dev->vfe_vbif_base);
	vfe_dev->vfe_vbif_base = NULL;
	iounmap(vfe_dev->vfe_base);
	iounmap(vfe_dev->vfe_base);
	vfe_dev->vfe_base = NULL;
	msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe44_clk_info,
	msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe44_clk_info,
		vfe_dev->vfe_clk, vfe_dev->num_clk, 0);
		vfe_dev->vfe_clk, vfe_dev->num_clk, 0);
	kfree(vfe_dev->vfe_clk);
	kfree(vfe_dev->vfe_clk);
+4 −0
Original line number Original line Diff line number Diff line
@@ -244,8 +244,10 @@ static int msm_vfe46_init_hardware(struct vfe_device *vfe_dev)
	return rc;
	return rc;
irq_req_failed:
irq_req_failed:
	iounmap(vfe_dev->vfe_vbif_base);
	iounmap(vfe_dev->vfe_vbif_base);
	vfe_dev->vfe_vbif_base = NULL;
vbif_remap_failed:
vbif_remap_failed:
	iounmap(vfe_dev->vfe_base);
	iounmap(vfe_dev->vfe_base);
	vfe_dev->vfe_base = NULL;
vfe_remap_failed:
vfe_remap_failed:
	msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe46_clk_info,
	msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe46_clk_info,
		vfe_dev->vfe_clk, vfe_dev->num_clk, 0);
		vfe_dev->vfe_clk, vfe_dev->num_clk, 0);
@@ -264,7 +266,9 @@ static void msm_vfe46_release_hardware(struct vfe_device *vfe_dev)
	free_irq(vfe_dev->vfe_irq->start, vfe_dev);
	free_irq(vfe_dev->vfe_irq->start, vfe_dev);
	tasklet_kill(&vfe_dev->vfe_tasklet);
	tasklet_kill(&vfe_dev->vfe_tasklet);
	iounmap(vfe_dev->vfe_vbif_base);
	iounmap(vfe_dev->vfe_vbif_base);
	vfe_dev->vfe_vbif_base = NULL;
	iounmap(vfe_dev->vfe_base);
	iounmap(vfe_dev->vfe_base);
	vfe_dev->vfe_base = NULL;
	msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe46_clk_info,
	msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe46_clk_info,
		vfe_dev->vfe_clk, vfe_dev->num_clk, 0);
		vfe_dev->vfe_clk, vfe_dev->num_clk, 0);
	kfree(vfe_dev->vfe_clk);
	kfree(vfe_dev->vfe_clk);
+4 −0
Original line number Original line Diff line number Diff line
@@ -243,8 +243,10 @@ static int msm_vfe47_init_hardware(struct vfe_device *vfe_dev)
	return rc;
	return rc;
irq_req_failed:
irq_req_failed:
	iounmap(vfe_dev->vfe_vbif_base);
	iounmap(vfe_dev->vfe_vbif_base);
	vfe_dev->vfe_vbif_base = NULL;
vbif_remap_failed:
vbif_remap_failed:
	iounmap(vfe_dev->vfe_base);
	iounmap(vfe_dev->vfe_base);
	vfe_dev->vfe_base = NULL;
vfe_remap_failed:
vfe_remap_failed:
	msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe47_clk_info,
	msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe47_clk_info,
		vfe_dev->vfe_clk, vfe_dev->num_clk, 0);
		vfe_dev->vfe_clk, vfe_dev->num_clk, 0);
@@ -263,7 +265,9 @@ static void msm_vfe47_release_hardware(struct vfe_device *vfe_dev)
	free_irq(vfe_dev->vfe_irq->start, vfe_dev);
	free_irq(vfe_dev->vfe_irq->start, vfe_dev);
	tasklet_kill(&vfe_dev->vfe_tasklet);
	tasklet_kill(&vfe_dev->vfe_tasklet);
	iounmap(vfe_dev->vfe_vbif_base);
	iounmap(vfe_dev->vfe_vbif_base);
	vfe_dev->vfe_vbif_base = NULL;
	iounmap(vfe_dev->vfe_base);
	iounmap(vfe_dev->vfe_base);
	vfe_dev->vfe_base = NULL;
	msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe47_clk_info,
	msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe47_clk_info,
		vfe_dev->vfe_clk, vfe_dev->num_clk, 0);
		vfe_dev->vfe_clk, vfe_dev->num_clk, 0);
	kfree(vfe_dev->vfe_clk);
	kfree(vfe_dev->vfe_clk);
Loading