From nobody Thu Apr 2 14:21:30 2026 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 183D836EAB9 for ; Fri, 27 Mar 2026 22:27:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774650437; cv=none; b=Acizqxpue8ZbKOj3rW/aNHkRKZeymv0NXeLxgAT26g0jisSPrar/2Vh+eFhLS4Q7TbRzKDF4dlaXG65INzMS/+j36SMIazamOr5LvMQqgexSbaNUVzGuq+OE575GOO2zoIyKVKniKaweo0D22w473VmLgoXy2I7xQdvsJflr7xA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774650437; c=relaxed/simple; bh=N2ffpG7GT211fQ5zkji6w7hKk/MOkCjKg7KQvmCllI4=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=WvdEhZqKNrZ5LxU2J4wjGInDLQtNhpGv+mTpUDCjqiCmTJh2rxuppq7o/dQOS2dQJ21HjQ6/52cK08Z/6OPDLQ5f+76nM9a92Ze3faRQfphQKULfh7g5BG/tUb79okr3alCHB3l7wFUeD4Wje5DBxSLhJ+1ISyiQZ+eKo+XKvaU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=nK6TKJuM; arc=none smtp.client-ip=209.85.128.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nK6TKJuM" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-48538c5956bso25394505e9.0 for ; Fri, 27 Mar 2026 15:27:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774650434; x=1775255234; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=k97b44HDmjZh/vldQtsPrUOt0HFv7cy3dp+8tuieXWA=; b=nK6TKJuMX3SIbX6QbK/E74YzfyLwo5IxPeF94yKCqFmWgxrIs+hpykPsfbosJHXfFY 8kOS3dVj996dqxTHWuTC69s06+aw0jqr2/ZpwLh7BollSDfAxOVFlof/fJ2bjY7eokop FxgEdlMwnG67Le2pfAvLOkpvNdNQuUQPBB8Itx6T5Nzt2zo18I6AdE6w37ARWBBNulIu 8FY2DJyAFEMqX3r+SMvrOBaftthcLg2nv/km66iSO3MxPupSkqa/VhcrvrXoJzr2eiJp oBMwcuY4KCD1bDaQQZxd6qdts25X/Z9IkkIeToV13+Bid86Hd4Szuxxw4fXmhSK/53p5 1C4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774650434; x=1775255234; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=k97b44HDmjZh/vldQtsPrUOt0HFv7cy3dp+8tuieXWA=; b=p5KakmdfTj2vekE5Fws7FCyh+36BYBsR/xKSh5l8Yn+1AxwMnEQHStvhVyfaIDzFWX QC8fRWEP0qlur0kXi2ZznHWSon0O4S0wMu2vlyeaWpcf+NtaCaMxtFza1puGoca5QL4+ ScUNH8uFxR2fMRHvVhps3BWCnsjMQbZHDVaWEDOMJ76GhKPA9yD2t/KQ0u571BEB1bGk A+PKcjnwXJ87Ra8Lwae62gGBJOdyjZN5IXgltLg4TwNqFjs6x6kwhnKje2FGGsqKf5Ht aoulqAmXGmKLxU0ODWlW5nQ3SYG1hn5USVHxt3acrUSQddzQg8gcR3I59Xe30EcQwX0J nl/w== X-Forwarded-Encrypted: i=1; AJvYcCW5LbyIx7H8esTJqAhULOJn6YpZdMtLEKM87feNtvK1OiT8AWEsoDWiu9pxLo1R2CeOXdR0hnWfqtQHIMQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yy9XF42x2nZ/NHdNPx+3+SyCpxS0Zzb24Y02rYR2VpL9nycLY4f VnNV50nMqviQc6kL/s/rcgbuuaPn3cVgbwSLK6GA0ndmGSM82tdVFlyAejumqb7O2Jud6w== X-Gm-Gg: ATEYQzwE827G5Ua+ZwwwRQtsFE4BVOaEj5T92UU7SvYvgV1kRUlFBqoO5lLEH6wwV4m KJSAk0AhLF/gP8TzJvjHM0P6JhnGJgji6vgUZEzSxKumpmhLJ9BTYflcVBx64GpIX/8BtNQhnqr vH5bAzWRlsS7mzezCkUhqlIKRp/sUAwxWIJtMc3gtpti9ezpWwdl28cbt5JFQTrVWU3FFI1Qf5C XUyijCRqXS+N48AnfilBB8iOZjpvfbg20XVL5BOL3JY/NlEtuRndoHhbuNZ0UF1PVd8uj3t8e0x 1eoYFyNOJPZF7/rdtpREPvTTGZ0JOBb0jys0+/t0QMU0SPfs3hotjUmllyNL+PHTJTaEMGJptM5 NoT57tDiLlD5//3AUHRBf6rv9Oc2RYeE+LzIZeT6n3S4QSXaFrkJDqIn6fL4Kwe/FdB0bv3Jqid uSCMk9YMkEhfkR1qrachSuuJS/mf1Fx4hlV6jzDh7OjujCLTCPYOAUUipI6BZpKqMk048jhSij+ o0IpffgXEel X-Received: by 2002:a05:600c:45cd:b0:486:fbc4:8fe2 with SMTP id 5b1f17b1804b1-4872912dd2bmr59529345e9.15.1774650433771; Fri, 27 Mar 2026 15:27:13 -0700 (PDT) Received: from dohko.chello.ie (188-141-5-72.dynamic.upc.ie. [188.141.5.72]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4873062ec9bsm10062655e9.7.2026.03.27.15.27.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Mar 2026 15:27:13 -0700 (PDT) From: David Carlier To: laurent.pinchart@ideasonboard.com, mchehab@kernel.org Cc: Frank.Li@nxp.com, s.hauer@pengutronix.de, festevam@gmail.com, jacopo@jmondi.org, aisheng.dong@nxp.com, guoniu.zhou@nxp.com, linux-media@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, David Carlier Subject: [PATCH] media: nxp: imx8-isi: fix memory leaks in probe error paths and remove Date: Fri, 27 Mar 2026 22:27:11 +0000 Message-ID: <20260327222711.268132-1-devnexen@gmail.com> X-Mailer: git-send-email 2.53.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable mxc_isi_probe() allocates isi->pipes with kzalloc_objs() but never frees it on any probe failure path or in mxc_isi_remove(), leaking the allocation on every failed probe and every normal unbind. Additionally, when mxc_isi_pipe_init() fails partway through the channel loop or when mxc_isi_v4l2_init() fails, the already initialized pipes are not cleaned up =E2=80=94 their media entities and mutexes are lea= ked. Fix both by adding kfree(isi->pipes) to all probe error paths and to mxc_isi_remove(), and cleaning up already-initialized pipes in the err_xbar error path. Fixes: cf21f328fcaf ("media: nxp: Add i.MX8 ISP Channel driver") Signed-off-by: David Carlier --- .../platform/nxp/imx8-isi/imx8-isi-core.c | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c b/drivers/= media/platform/nxp/imx8-isi/imx8-isi-core.c index 4bf8570e1b9e..ab32c5b6ac9c 100644 --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c @@ -490,33 +490,43 @@ static int mxc_isi_probe(struct platform_device *pdev) return -ENOMEM; =20 isi->num_clks =3D devm_clk_bulk_get_all(dev, &isi->clks); - if (isi->num_clks < 0) + if (isi->num_clks < 0) { + kfree(isi->pipes); return dev_err_probe(dev, isi->num_clks, "Failed to get clocks\n"); + } =20 isi->regs =3D devm_platform_ioremap_resource(pdev, 0); - if (IS_ERR(isi->regs)) + if (IS_ERR(isi->regs)) { + kfree(isi->pipes); return dev_err_probe(dev, PTR_ERR(isi->regs), "Failed to get ISI register map\n"); + } =20 if (isi->pdata->gasket_ops) { isi->gasket =3D syscon_regmap_lookup_by_phandle(dev->of_node, "fsl,blk-ctrl"); - if (IS_ERR(isi->gasket)) + if (IS_ERR(isi->gasket)) { + kfree(isi->pipes); return dev_err_probe(dev, PTR_ERR(isi->gasket), "failed to get gasket\n"); + } } =20 dma_size =3D isi->pdata->has_36bit_dma ? 36 : 32; dma_set_mask_and_coherent(dev, DMA_BIT_MASK(dma_size)); =20 ret =3D devm_pm_runtime_enable(dev); - if (ret) + if (ret) { + kfree(isi->pipes); return ret; + } =20 ret =3D mxc_isi_crossbar_init(isi); - if (ret) + if (ret) { + kfree(isi->pipes); return dev_err_probe(dev, ret, "Failed to initialize crossbar\n"); + } =20 for (i =3D 0; i < isi->pdata->num_channels; ++i) { ret =3D mxc_isi_pipe_init(isi, i); @@ -538,7 +548,10 @@ static int mxc_isi_probe(struct platform_device *pdev) return 0; =20 err_xbar: + while (i--) + mxc_isi_pipe_cleanup(&isi->pipes[i]); mxc_isi_crossbar_cleanup(&isi->crossbar); + kfree(isi->pipes); =20 return ret; } @@ -556,6 +569,7 @@ static void mxc_isi_remove(struct platform_device *pdev) mxc_isi_pipe_cleanup(pipe); } =20 + kfree(isi->pipes); mxc_isi_crossbar_cleanup(&isi->crossbar); mxc_isi_v4l2_cleanup(isi); } --=20 2.53.0