diff mbox series

[1/2] media: imx7-media-csi: don't store a floating pointer

Message ID 1c186d5fd734e63305352986b6c5e84d19375787.1550582690.git.mchehab+samsung@kernel.org (mailing list archive)
State New, archived
Headers show
Series [1/2] media: imx7-media-csi: don't store a floating pointer | expand

Commit Message

Mauro Carvalho Chehab Feb. 19, 2019, 1:24 p.m. UTC
if imx7_csi_try_fmt() fails, outcc variable won't be
initialized and csi->cc[IMX7_CSI_PAD_SRC] would be pointing
to a random location.

Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
---
 drivers/staging/media/imx/imx7-media-csi.c | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

Comments

Rui Miguel Silva Feb. 20, 2019, 11:21 a.m. UTC | #1
Oi Mauro,
On Tue 19 Feb 2019 at 13:24, Mauro Carvalho Chehab wrote:
> if imx7_csi_try_fmt() fails, outcc variable won't be
> initialized and csi->cc[IMX7_CSI_PAD_SRC] would be pointing
> to a random location.
>
> Signed-off-by: Mauro Carvalho Chehab 
> <mchehab+samsung@kernel.org>

Thanks for this, looks good.
Reviewed-by: Rui Miguel Silva <rmfrfs@gmail.com>

---
Cheers,
	Rui

> ---
>  drivers/staging/media/imx/imx7-media-csi.c | 18 
>  +++++++++++-------
>  1 file changed, 11 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/staging/media/imx/imx7-media-csi.c 
> b/drivers/staging/media/imx/imx7-media-csi.c
> index d775e259fece..0b1788d79ce9 100644
> --- a/drivers/staging/media/imx/imx7-media-csi.c
> +++ b/drivers/staging/media/imx/imx7-media-csi.c
> @@ -980,10 +980,10 @@ static int imx7_csi_get_fmt(struct 
> v4l2_subdev *sd,
>  	return ret;
>  }
>  
> -static void imx7_csi_try_fmt(struct imx7_csi *csi,
> -			     struct v4l2_subdev_pad_config *cfg,
> -			     struct v4l2_subdev_format *sdformat,
> -			     const struct imx_media_pixfmt **cc)
> +static int imx7_csi_try_fmt(struct imx7_csi *csi,
> +			    struct v4l2_subdev_pad_config *cfg,
> +			    struct v4l2_subdev_format *sdformat,
> +			    const struct imx_media_pixfmt **cc)
>  {
>  	const struct imx_media_pixfmt *in_cc;
>  	struct v4l2_mbus_framefmt *in_fmt;
> @@ -992,7 +992,7 @@ static void imx7_csi_try_fmt(struct imx7_csi 
> *csi,
>  	in_fmt = imx7_csi_get_format(csi, cfg, IMX7_CSI_PAD_SINK,
>  				     sdformat->which);
>  	if (!in_fmt)
> -		return;
> +		return -EINVAL;
>  
>  	switch (sdformat->pad) {
>  	case IMX7_CSI_PAD_SRC:
> @@ -1023,8 +1023,10 @@ static void imx7_csi_try_fmt(struct 
> imx7_csi *csi,
>  						   false);
>  		break;
>  	default:
> +		return -EINVAL;
>  		break;
>  	}
> +	return 0;
>  }
>  
>  static int imx7_csi_set_fmt(struct v4l2_subdev *sd,
> @@ -1067,8 +1069,10 @@ static int imx7_csi_set_fmt(struct 
> v4l2_subdev *sd,
>  		format.pad = IMX7_CSI_PAD_SRC;
>  		format.which = sdformat->which;
>  		format.format = sdformat->format;
> -		imx7_csi_try_fmt(csi, cfg, &format, &outcc);
> -
> +		if (imx7_csi_try_fmt(csi, cfg, &format, &outcc)) {
> +			ret = -EINVAL;
> +			goto out_unlock;
> +		}
>  		outfmt = imx7_csi_get_format(csi, cfg, 
>  IMX7_CSI_PAD_SRC,
>  					     sdformat->which);
>  		*outfmt = format.format;
diff mbox series

Patch

diff --git a/drivers/staging/media/imx/imx7-media-csi.c b/drivers/staging/media/imx/imx7-media-csi.c
index d775e259fece..0b1788d79ce9 100644
--- a/drivers/staging/media/imx/imx7-media-csi.c
+++ b/drivers/staging/media/imx/imx7-media-csi.c
@@ -980,10 +980,10 @@  static int imx7_csi_get_fmt(struct v4l2_subdev *sd,
 	return ret;
 }
 
-static void imx7_csi_try_fmt(struct imx7_csi *csi,
-			     struct v4l2_subdev_pad_config *cfg,
-			     struct v4l2_subdev_format *sdformat,
-			     const struct imx_media_pixfmt **cc)
+static int imx7_csi_try_fmt(struct imx7_csi *csi,
+			    struct v4l2_subdev_pad_config *cfg,
+			    struct v4l2_subdev_format *sdformat,
+			    const struct imx_media_pixfmt **cc)
 {
 	const struct imx_media_pixfmt *in_cc;
 	struct v4l2_mbus_framefmt *in_fmt;
@@ -992,7 +992,7 @@  static void imx7_csi_try_fmt(struct imx7_csi *csi,
 	in_fmt = imx7_csi_get_format(csi, cfg, IMX7_CSI_PAD_SINK,
 				     sdformat->which);
 	if (!in_fmt)
-		return;
+		return -EINVAL;
 
 	switch (sdformat->pad) {
 	case IMX7_CSI_PAD_SRC:
@@ -1023,8 +1023,10 @@  static void imx7_csi_try_fmt(struct imx7_csi *csi,
 						   false);
 		break;
 	default:
+		return -EINVAL;
 		break;
 	}
+	return 0;
 }
 
 static int imx7_csi_set_fmt(struct v4l2_subdev *sd,
@@ -1067,8 +1069,10 @@  static int imx7_csi_set_fmt(struct v4l2_subdev *sd,
 		format.pad = IMX7_CSI_PAD_SRC;
 		format.which = sdformat->which;
 		format.format = sdformat->format;
-		imx7_csi_try_fmt(csi, cfg, &format, &outcc);
-
+		if (imx7_csi_try_fmt(csi, cfg, &format, &outcc)) {
+			ret = -EINVAL;
+			goto out_unlock;
+		}
 		outfmt = imx7_csi_get_format(csi, cfg, IMX7_CSI_PAD_SRC,
 					     sdformat->which);
 		*outfmt = format.format;