]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
media: imx-jpeg: Fix potential error pointer dereference in detach_pm()
authorDan Carpenter <dan.carpenter@linaro.org>
Thu, 17 Oct 2024 20:34:16 +0000 (23:34 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Mar 2025 11:50:48 +0000 (12:50 +0100)
[ Upstream commit 1378ffec30367233152b7dbf4fa6a25ee98585d1 ]

The proble is on the first line:

if (jpeg->pd_dev[i] && !pm_runtime_suspended(jpeg->pd_dev[i]))

If jpeg->pd_dev[i] is an error pointer, then passing it to
pm_runtime_suspended() will lead to an Oops.  The other conditions
check for both error pointers and NULL, but it would be more clear to
use the IS_ERR_OR_NULL() check for that.

Fixes: fd0af4cd35da ("media: imx-jpeg: Ensure power suppliers be suspended before detach them")
Cc: <stable@vger.kernel.org>
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Reviewed-by: Ming Qian <ming.qian@nxp.com>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/media/platform/imx-jpeg/mxc-jpeg.c

index 8ac844db0e833000784742633cd848be64c2f6f9..059e45aa03b7f2132cb18c94f9fe95a026f86e3c 100644 (file)
@@ -1997,11 +1997,12 @@ static void mxc_jpeg_detach_pm_domains(struct mxc_jpeg_dev *jpeg)
        int i;
 
        for (i = 0; i < jpeg->num_domains; i++) {
-               if (jpeg->pd_dev[i] && !pm_runtime_suspended(jpeg->pd_dev[i]))
+               if (!IS_ERR_OR_NULL(jpeg->pd_dev[i]) &&
+                   !pm_runtime_suspended(jpeg->pd_dev[i]))
                        pm_runtime_force_suspend(jpeg->pd_dev[i]);
-               if (jpeg->pd_link[i] && !IS_ERR(jpeg->pd_link[i]))
+               if (!IS_ERR_OR_NULL(jpeg->pd_link[i]))
                        device_link_del(jpeg->pd_link[i]);
-               if (jpeg->pd_dev[i] && !IS_ERR(jpeg->pd_dev[i]))
+               if (!IS_ERR_OR_NULL(jpeg->pd_dev[i]))
                        dev_pm_domain_detach(jpeg->pd_dev[i], true);
                jpeg->pd_dev[i] = NULL;
                jpeg->pd_link[i] = NULL;