Thread (8 messages) 8 messages, 5 authors, 2022-08-25

Re: [PATCH v1 2/3] media: cedrus: Set the platform driver data earlier

From: Samuel Holland <samuel@sholland.org>
Date: 2022-08-23 03:57:46
Also in: linux-media, linux-staging, linux-sunxi, lkml, stable

On 8/20/22 3:25 AM, Jernej Škrabec wrote:
Dne petek, 19. avgust 2022 ob 17:37:20 CEST je Nicolas Dufresne napisal(a):
quoted
Le vendredi 19 août 2022 à 06:17 +0200, Jernej Škrabec a écrit :
quoted
Dne četrtek, 18. avgust 2022 ob 22:33:07 CEST je Nicolas Dufresne 
napisal(a):
quoted
quoted
quoted
From: Dmitry Osipenko <dmitry.osipenko@collabora.com>

The cedrus_hw_resume() crashes with NULL deference on driver probe if
runtime PM is disabled because it uses platform data that hasn't been
set up yet. Fix this by setting the platform data earlier during probe.
Does it even work without PM? Maybe it would be better if Cedrus would
select PM in Kconfig.
I cannot comment myself on this, but it does not seem to invalidate this
Dmitry's fix.
If NULL pointer dereference happens only when PM is disabled, then it does. I 
have PM always enabled and I never experienced above issue.
There's still a bug even with PM enabled: the v4l2 device is exposed to
userspace, and therefore userspace could trigger a PM resume, before
platform_set_drvdata() is called.
quoted
quoted
quoted
Cc: stable@vger.kernel.org
Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Please add a Fixes tag. With that:

Reviewed-by: Samuel Holland <samuel@sholland.org>
quoted
quoted
quoted
---

 drivers/staging/media/sunxi/cedrus/cedrus.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/staging/media/sunxi/cedrus/cedrus.c
b/drivers/staging/media/sunxi/cedrus/cedrus.c index
960a0130cd620..55c54dfdc585c 100644
--- a/drivers/staging/media/sunxi/cedrus/cedrus.c
+++ b/drivers/staging/media/sunxi/cedrus/cedrus.c
@@ -448,6 +448,8 @@ static int cedrus_probe(struct platform_device
*pdev)

 	if (!dev)
 		return -ENOMEM;

+	platform_set_drvdata(pdev, dev);
+
 	dev->vfd = cedrus_video_device;
 	dev->dev = &pdev->dev;
 	dev->pdev = pdev;
@@ -521,8 +523,6 @@ static int cedrus_probe(struct platform_device
*pdev)

 		goto err_m2m_mc;
 	}

-	platform_set_drvdata(pdev, dev);
-
 	return 0;
 
 err_m2m_mc:
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help