aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab+samsung@kernel.org>2019-02-19 08:18:44 -0500
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>2019-02-19 08:18:44 -0500
commit1c186d5fd734e63305352986b6c5e84d19375787 (patch)
treec524521568021c7cfd4305bf825b31423cb262a5 /drivers/staging
parentmedia: imx7-media-csi.c: fix merge breakage (diff)
downloadlinux-dev-1c186d5fd734e63305352986b6c5e84d19375787.tar.xz
linux-dev-1c186d5fd734e63305352986b6c5e84d19375787.zip
media: imx7-media-csi: don't store a floating pointer
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>
Diffstat (limited to 'drivers/staging')
-rw-r--r--drivers/staging/media/imx/imx7-media-csi.c18
1 files 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 @@ out_unlock:
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;