Skip to contentSkip to conversation

media: imx-jpeg: Fix potential error pointer dereference in detach_pm()

PATCH In review Dan Carpenter 2 participants 2 messages Oct 17, 2024 – Oct 18, 2024

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 media: imx-jpeg: Fix potential error pointer dereference in detach_pm()

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")

---
v2: The buggy patch hasn't hit Linus's tree yet, but it's destined for stable so
add a stable tag to this too.

 drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c +4 -3
index d8e946aebba2..918ab12edc9e 100644
@@ -2679,11 +2679,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;
Signature · 1 line
2.45.2
Reviewed-by on v2 1/1
#1 lore raw
Quoted 9 lines

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.

Quoted 4 lines
Fixes fd0af4cd35da ("media: imx-jpeg: Ensure power suppliers be suspended

before detach them")

Quoted 31 lines

---
v2: The buggy patch hasn't hit Linus's tree yet, but it's destined for stable so
add a stable tag to this too.

drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c | 7 ++++---

1 file changed, 4 insertions(+), 3 deletions(-)
drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c +4 -3
index d8e946aebba2..918ab12edc9e 100644
@@ -2679,11 +2679,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;

--
2.45.2