Takashi Iwai b841b8
From 3630901933afba1d16c462b04d569b7576339223 Mon Sep 17 00:00:00 2001
Takashi Iwai b841b8
From: Ricardo Ribalda <ribalda@chromium.org>
Takashi Iwai b841b8
Date: Mon, 15 Mar 2021 13:34:05 +0100
Takashi Iwai b841b8
Subject: [PATCH] media: staging/intel-ipu3: Fix memory leak in imu_fmt
Takashi Iwai b841b8
Git-commit: 3630901933afba1d16c462b04d569b7576339223
Takashi Iwai b841b8
Patch-mainline: v5.13-rc1
Takashi Iwai b841b8
References: git-fixes
Takashi Iwai b841b8
Takashi Iwai b841b8
We are losing the reference to an allocated memory if try. Change the
Takashi Iwai b841b8
order of the check to avoid that.
Takashi Iwai b841b8
Takashi Iwai b841b8
Cc: stable@vger.kernel.org
Takashi Iwai b841b8
Fixes: 6d5f26f2e045 ("media: staging/intel-ipu3-v4l: reduce kernel stack usage")
Takashi Iwai b841b8
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Takashi Iwai b841b8
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Takashi Iwai b841b8
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Takashi Iwai b841b8
Acked-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai b841b8
Takashi Iwai b841b8
---
Takashi Iwai b841b8
 drivers/staging/media/ipu3/ipu3-v4l2.c | 11 +++++++----
Takashi Iwai b841b8
 1 file changed, 7 insertions(+), 4 deletions(-)
Takashi Iwai b841b8
Takashi Iwai b841b8
diff --git a/drivers/staging/media/ipu3/ipu3-v4l2.c b/drivers/staging/media/ipu3/ipu3-v4l2.c
Takashi Iwai b841b8
index e8944e489c56..9e8980b34547 100644
Takashi Iwai b841b8
--- a/drivers/staging/media/ipu3/ipu3-v4l2.c
Takashi Iwai b841b8
+++ b/drivers/staging/media/ipu3/ipu3-v4l2.c
Takashi Iwai b841b8
@@ -694,6 +694,13 @@ static int imgu_fmt(struct imgu_device *imgu, unsigned int pipe, int node,
Takashi Iwai b841b8
 		if (inode == IMGU_NODE_STAT_3A || inode == IMGU_NODE_PARAMS)
Takashi Iwai b841b8
 			continue;
Takashi Iwai b841b8
 
Takashi Iwai b841b8
+		/* CSS expects some format on OUT queue */
Takashi Iwai b841b8
+		if (i != IPU3_CSS_QUEUE_OUT &&
Takashi Iwai b841b8
+		    !imgu_pipe->nodes[inode].enabled) {
Takashi Iwai b841b8
+			fmts[i] = NULL;
Takashi Iwai b841b8
+			continue;
Takashi Iwai b841b8
+		}
Takashi Iwai b841b8
+
Takashi Iwai b841b8
 		if (try) {
Takashi Iwai b841b8
 			fmts[i] = kmemdup(&imgu_pipe->nodes[inode].vdev_fmt.fmt.pix_mp,
Takashi Iwai b841b8
 					  sizeof(struct v4l2_pix_format_mplane),
Takashi Iwai b841b8
@@ -706,10 +713,6 @@ static int imgu_fmt(struct imgu_device *imgu, unsigned int pipe, int node,
Takashi Iwai b841b8
 			fmts[i] = &imgu_pipe->nodes[inode].vdev_fmt.fmt.pix_mp;
Takashi Iwai b841b8
 		}
Takashi Iwai b841b8
 
Takashi Iwai b841b8
-		/* CSS expects some format on OUT queue */
Takashi Iwai b841b8
-		if (i != IPU3_CSS_QUEUE_OUT &&
Takashi Iwai b841b8
-		    !imgu_pipe->nodes[inode].enabled)
Takashi Iwai b841b8
-			fmts[i] = NULL;
Takashi Iwai b841b8
 	}
Takashi Iwai b841b8
 
Takashi Iwai b841b8
 	if (!try) {
Takashi Iwai b841b8
-- 
Takashi Iwai b841b8
2.26.2
Takashi Iwai b841b8