* [PATCH v2] media: i2c: vd56g3: clean up subdev state on probe failure
@ 2026-04-24 16:52 Myeonghun Pak
2026-06-16 12:49 ` Benjamin Mugnier
0 siblings, 1 reply; 5+ messages in thread
From: Myeonghun Pak @ 2026-04-24 16:52 UTC (permalink / raw)
To: Benjamin Mugnier, Sylvain Petinot, Sakari Ailus, Mauro Carvalho Chehab
Cc: Myeonghun Pak, linux-media, linux-kernel, stable
vd56g3_subdev_init() calls v4l2_subdev_init_finalize(), which allocates
the subdev active state and requires v4l2_subdev_cleanup() to release it.
If vd56g3_update_controls() fails after finalize succeeds, the probe error
path currently skips v4l2_subdev_cleanup() and returns an error. The driver
.remove() callback is not called after a failed probe, so the active state
is leaked.
Route this error through a subdev cleanup label before freeing the control
handler and media entity.
Fixes: 87aa97fc3157 ("media: i2c: Add driver for ST VD56G3 camera sensor")
Cc: stable@vger.kernel.org
Signed-off-by: Myeonghun Pak <mhun512@gmail.com>
---
Changes in v2:
- Use a lowercase subject summary.
drivers/media/i2c/vd56g3.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/media/i2c/vd56g3.c b/drivers/media/i2c/vd56g3.c
index 157acea9e2..43f792288a 100644
--- a/drivers/media/i2c/vd56g3.c
+++ b/drivers/media/i2c/vd56g3.c
@@ -1427,11 +1427,14 @@ static int vd56g3_subdev_init(struct vd56g3 *sensor)
v4l2_subdev_unlock_state(state);
if (ret) {
dev_err(sensor->dev, "Controls update failed: %d\n", ret);
- goto err_ctrls;
+ goto err_subdev;
}
return 0;
+err_subdev:
+ v4l2_subdev_cleanup(&sensor->sd);
+
err_ctrls:
v4l2_ctrl_handler_free(sensor->sd.ctrl_handler);
--
2.50.1
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH v2] media: i2c: vd56g3: clean up subdev state on probe failure 2026-04-24 16:52 [PATCH v2] media: i2c: vd56g3: clean up subdev state on probe failure Myeonghun Pak @ 2026-06-16 12:49 ` Benjamin Mugnier 2026-06-18 11:53 ` Sakari Ailus 0 siblings, 1 reply; 5+ messages in thread From: Benjamin Mugnier @ 2026-06-16 12:49 UTC (permalink / raw) To: Myeonghun Pak, Sylvain Petinot, Sakari Ailus, Mauro Carvalho Chehab Cc: linux-media, linux-kernel, stable Hi, Thank you for your patch, and apologies for the delay. Le 24/04/2026 à 18:52, Myeonghun Pak a écrit : > vd56g3_subdev_init() calls v4l2_subdev_init_finalize(), which allocates > the subdev active state and requires v4l2_subdev_cleanup() to release it. > > If vd56g3_update_controls() fails after finalize succeeds, the probe error > path currently skips v4l2_subdev_cleanup() and returns an error. The driver > .remove() callback is not called after a failed probe, so the active state > is leaked. > > Route this error through a subdev cleanup label before freeing the control > handler and media entity. > > Fixes: 87aa97fc3157 ("media: i2c: Add driver for ST VD56G3 camera sensor") > Cc: stable@vger.kernel.org > Signed-off-by: Myeonghun Pak <mhun512@gmail.com> > --- > Changes in v2: > - Use a lowercase subject summary. Please keep the first character uppercase, just like other commits on this module. > > drivers/media/i2c/vd56g3.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/media/i2c/vd56g3.c b/drivers/media/i2c/vd56g3.c > index 157acea9e2..43f792288a 100644 > --- a/drivers/media/i2c/vd56g3.c > +++ b/drivers/media/i2c/vd56g3.c > @@ -1427,11 +1427,14 @@ static int vd56g3_subdev_init(struct vd56g3 *sensor) > v4l2_subdev_unlock_state(state); > if (ret) { > dev_err(sensor->dev, "Controls update failed: %d\n", ret); > - goto err_ctrls; > + goto err_subdev; > } > > return 0; > > +err_subdev: > + v4l2_subdev_cleanup(&sensor->sd); v4l2_subdev_cleanup() is already performed in the caller (i.e. vd56g3_probe()), but as you noticed it is not called from this path. I'd rather have the return value route correctly through v4l2_subdev_cleanup() in vd56g3_probe(), allowing to keep a unique call to v4l2_subdev_cleanup() instead. This patch looks like is LLM generated and sparks my curiosity. If so you must disclaim it using an Assisted-by tag [1]. Sorry if I’m mistaken. [1] https://docs.kernel.org/process/coding-assistants.html > + > err_ctrls: > v4l2_ctrl_handler_free(sensor->sd.ctrl_handler); > -- Regards, Benjamin ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] media: i2c: vd56g3: clean up subdev state on probe failure 2026-06-16 12:49 ` Benjamin Mugnier @ 2026-06-18 11:53 ` Sakari Ailus 2026-06-19 8:59 ` Benjamin Mugnier 0 siblings, 1 reply; 5+ messages in thread From: Sakari Ailus @ 2026-06-18 11:53 UTC (permalink / raw) To: Benjamin Mugnier Cc: Myeonghun Pak, Sylvain Petinot, Mauro Carvalho Chehab, linux-media, linux-kernel, stable Hi Benjamin, On Tue, Jun 16, 2026 at 02:49:54PM +0200, Benjamin Mugnier wrote: > Hi, > > Thank you for your patch, and apologies for the delay. > > Le 24/04/2026 à 18:52, Myeonghun Pak a écrit : > > vd56g3_subdev_init() calls v4l2_subdev_init_finalize(), which allocates > > the subdev active state and requires v4l2_subdev_cleanup() to release it. > > > > If vd56g3_update_controls() fails after finalize succeeds, the probe error > > path currently skips v4l2_subdev_cleanup() and returns an error. The driver > > .remove() callback is not called after a failed probe, so the active state > > is leaked. > > > > Route this error through a subdev cleanup label before freeing the control > > handler and media entity. > > > > Fixes: 87aa97fc3157 ("media: i2c: Add driver for ST VD56G3 camera sensor") > > Cc: stable@vger.kernel.org > > Signed-off-by: Myeonghun Pak <mhun512@gmail.com> > > --- > > Changes in v2: > > - Use a lowercase subject summary. > > Please keep the first character uppercase, just like other commits on > this module. > > > > > drivers/media/i2c/vd56g3.c | 5 ++++- > > 1 file changed, 4 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/media/i2c/vd56g3.c b/drivers/media/i2c/vd56g3.c > > index 157acea9e2..43f792288a 100644 > > --- a/drivers/media/i2c/vd56g3.c > > +++ b/drivers/media/i2c/vd56g3.c > > @@ -1427,11 +1427,14 @@ static int vd56g3_subdev_init(struct vd56g3 *sensor) > > v4l2_subdev_unlock_state(state); > > if (ret) { > > dev_err(sensor->dev, "Controls update failed: %d\n", ret); > > - goto err_ctrls; > > + goto err_subdev; > > } > > > > return 0; > > > > +err_subdev: > > + v4l2_subdev_cleanup(&sensor->sd); > > v4l2_subdev_cleanup() is already performed in the caller (i.e. > vd56g3_probe()), but as you noticed it is not called from this path. I'd > rather have the return value route correctly through > v4l2_subdev_cleanup() in vd56g3_probe(), allowing to keep a unique call > to v4l2_subdev_cleanup() instead. Is it? If vd56g3_update_controls() in vd56g3_subdev_init() fails, it'll jump to err_power_off in vd56g3_probe() which does PM related cleanup only. > > This patch looks like is LLM generated and sparks my curiosity. If so > you must disclaim it using an Assisted-by tag [1]. Sorry if I’m mistaken. > > [1] https://docs.kernel.org/process/coding-assistants.html > > > + > > err_ctrls: > > v4l2_ctrl_handler_free(sensor->sd.ctrl_handler); > > > > -- > Regards, > Benjamin > -- Kind regards, Sakari Ailus ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] media: i2c: vd56g3: clean up subdev state on probe failure 2026-06-18 11:53 ` Sakari Ailus @ 2026-06-19 8:59 ` Benjamin Mugnier 2026-06-22 12:00 ` Myeonghun Pak 0 siblings, 1 reply; 5+ messages in thread From: Benjamin Mugnier @ 2026-06-19 8:59 UTC (permalink / raw) To: Sakari Ailus Cc: Myeonghun Pak, Sylvain Petinot, Mauro Carvalho Chehab, linux-media, linux-kernel, stable Hi Sakari, Le 18/06/2026 à 13:53, Sakari Ailus a écrit : > Hi Benjamin, > > On Tue, Jun 16, 2026 at 02:49:54PM +0200, Benjamin Mugnier wrote: >> Hi, >> >> Thank you for your patch, and apologies for the delay. >> >> Le 24/04/2026 à 18:52, Myeonghun Pak a écrit : >>> vd56g3_subdev_init() calls v4l2_subdev_init_finalize(), which allocates >>> the subdev active state and requires v4l2_subdev_cleanup() to release it. >>> >>> If vd56g3_update_controls() fails after finalize succeeds, the probe error >>> path currently skips v4l2_subdev_cleanup() and returns an error. The driver >>> .remove() callback is not called after a failed probe, so the active state >>> is leaked. >>> >>> Route this error through a subdev cleanup label before freeing the control >>> handler and media entity. >>> >>> Fixes: 87aa97fc3157 ("media: i2c: Add driver for ST VD56G3 camera sensor") >>> Cc: stable@vger.kernel.org >>> Signed-off-by: Myeonghun Pak <mhun512@gmail.com> >>> --- >>> Changes in v2: >>> - Use a lowercase subject summary. >> >> Please keep the first character uppercase, just like other commits on >> this module. >> >>> >>> drivers/media/i2c/vd56g3.c | 5 ++++- >>> 1 file changed, 4 insertions(+), 1 deletion(-) >>> >>> diff --git a/drivers/media/i2c/vd56g3.c b/drivers/media/i2c/vd56g3.c >>> index 157acea9e2..43f792288a 100644 >>> --- a/drivers/media/i2c/vd56g3.c >>> +++ b/drivers/media/i2c/vd56g3.c >>> @@ -1427,11 +1427,14 @@ static int vd56g3_subdev_init(struct vd56g3 *sensor) >>> v4l2_subdev_unlock_state(state); >>> if (ret) { >>> dev_err(sensor->dev, "Controls update failed: %d\n", ret); >>> - goto err_ctrls; >>> + goto err_subdev; >>> } >>> >>> return 0; >>> >>> +err_subdev: >>> + v4l2_subdev_cleanup(&sensor->sd); >> >> v4l2_subdev_cleanup() is already performed in the caller (i.e. >> vd56g3_probe()), but as you noticed it is not called from this path. I'd >> rather have the return value route correctly through >> v4l2_subdev_cleanup() in vd56g3_probe(), allowing to keep a unique call >> to v4l2_subdev_cleanup() instead. > > Is it? > > If vd56g3_update_controls() in vd56g3_subdev_init() fails, it'll jump to > err_power_off in vd56g3_probe() which does PM related cleanup only. > Exactly, I realize my sentence was poorly written, but if I understand correctly we're on the same page. The problem being v4l2_subdev_cleanup() not being called in any path if vd56g3_update_controls() fails. Now if vd56g3_update_controls() fails, instead of performing v4l2_subdev_cleanup() in vd56g3_subdev_init() as this patch does, I'd rather have it done in vd56g3_probe()'s jump back so we can keep it all at the same place, instead of having 2 v4l2_subdev_cleanup() in 2 different places. Tell me if this is still unclear. >> >> This patch looks like is LLM generated and sparks my curiosity. If so >> you must disclaim it using an Assisted-by tag [1]. Sorry if I’m mistaken. >> >> [1] https://docs.kernel.org/process/coding-assistants.html >> >>> + >>> err_ctrls: >>> v4l2_ctrl_handler_free(sensor->sd.ctrl_handler); >>> >> >> -- >> Regards, >> Benjamin >> > -- Regards, Benjamin ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] media: i2c: vd56g3: clean up subdev state on probe failure 2026-06-19 8:59 ` Benjamin Mugnier @ 2026-06-22 12:00 ` Myeonghun Pak 0 siblings, 0 replies; 5+ messages in thread From: Myeonghun Pak @ 2026-06-22 12:00 UTC (permalink / raw) To: Benjamin Mugnier Cc: Sakari Ailus, Sylvain Petinot, Mauro Carvalho Chehab, linux-media, linux-kernel, stable Hi Benjamin, Sakari, Thank you for the clarification. I agree. The missing cleanup is on the vd56g3_update_controls() failure path after v4l2_subdev_init_finalize() has succeeded. I'll send a v3 that keeps v4l2_subdev_cleanup() in vd56g3_subdev_cleanup(), and routes this failure through the probe-side err_subdev path instead of adding another v4l2_subdev_cleanup() call in vd56g3_subdev_init(). I'll also add the appropriate Assisted-by tag. Regards, Myeonghun 2026년 6월 19일 (금) 오후 5:59, Benjamin Mugnier <benjamin.mugnier@foss.st.com>님이 작성: > > Hi Sakari, > > Le 18/06/2026 à 13:53, Sakari Ailus a écrit : > > Hi Benjamin, > > > > On Tue, Jun 16, 2026 at 02:49:54PM +0200, Benjamin Mugnier wrote: > >> Hi, > >> > >> Thank you for your patch, and apologies for the delay. > >> > >> Le 24/04/2026 à 18:52, Myeonghun Pak a écrit : > >>> vd56g3_subdev_init() calls v4l2_subdev_init_finalize(), which allocates > >>> the subdev active state and requires v4l2_subdev_cleanup() to release it. > >>> > >>> If vd56g3_update_controls() fails after finalize succeeds, the probe error > >>> path currently skips v4l2_subdev_cleanup() and returns an error. The driver > >>> .remove() callback is not called after a failed probe, so the active state > >>> is leaked. > >>> > >>> Route this error through a subdev cleanup label before freeing the control > >>> handler and media entity. > >>> > >>> Fixes: 87aa97fc3157 ("media: i2c: Add driver for ST VD56G3 camera sensor") > >>> Cc: stable@vger.kernel.org > >>> Signed-off-by: Myeonghun Pak <mhun512@gmail.com> > >>> --- > >>> Changes in v2: > >>> - Use a lowercase subject summary. > >> > >> Please keep the first character uppercase, just like other commits on > >> this module. > >> > >>> > >>> drivers/media/i2c/vd56g3.c | 5 ++++- > >>> 1 file changed, 4 insertions(+), 1 deletion(-) > >>> > >>> diff --git a/drivers/media/i2c/vd56g3.c b/drivers/media/i2c/vd56g3.c > >>> index 157acea9e2..43f792288a 100644 > >>> --- a/drivers/media/i2c/vd56g3.c > >>> +++ b/drivers/media/i2c/vd56g3.c > >>> @@ -1427,11 +1427,14 @@ static int vd56g3_subdev_init(struct vd56g3 *sensor) > >>> v4l2_subdev_unlock_state(state); > >>> if (ret) { > >>> dev_err(sensor->dev, "Controls update failed: %d\n", ret); > >>> - goto err_ctrls; > >>> + goto err_subdev; > >>> } > >>> > >>> return 0; > >>> > >>> +err_subdev: > >>> + v4l2_subdev_cleanup(&sensor->sd); > >> > >> v4l2_subdev_cleanup() is already performed in the caller (i.e. > >> vd56g3_probe()), but as you noticed it is not called from this path. I'd > >> rather have the return value route correctly through > >> v4l2_subdev_cleanup() in vd56g3_probe(), allowing to keep a unique call > >> to v4l2_subdev_cleanup() instead. > > > > Is it? > > > > If vd56g3_update_controls() in vd56g3_subdev_init() fails, it'll jump to > > err_power_off in vd56g3_probe() which does PM related cleanup only. > > > > Exactly, I realize my sentence was poorly written, but if I understand > correctly we're on the same page. The problem being > v4l2_subdev_cleanup() not being called in any path if > vd56g3_update_controls() fails. > > Now if vd56g3_update_controls() fails, instead of performing > v4l2_subdev_cleanup() in vd56g3_subdev_init() as this patch does, I'd > rather have it done in vd56g3_probe()'s jump back so we can keep it all > at the same place, instead of having 2 v4l2_subdev_cleanup() in 2 > different places. > > Tell me if this is still unclear. > > >> > >> This patch looks like is LLM generated and sparks my curiosity. If so > >> you must disclaim it using an Assisted-by tag [1]. Sorry if I’m mistaken. > >> > >> [1] https://docs.kernel.org/process/coding-assistants.html > >> > >>> + > >>> err_ctrls: > >>> v4l2_ctrl_handler_free(sensor->sd.ctrl_handler); > >>> > >> > >> -- > >> Regards, > >> Benjamin > >> > > > > -- > Regards, > Benjamin > ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-06-22 12:01 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2026-04-24 16:52 [PATCH v2] media: i2c: vd56g3: clean up subdev state on probe failure Myeonghun Pak 2026-06-16 12:49 ` Benjamin Mugnier 2026-06-18 11:53 ` Sakari Ailus 2026-06-19 8:59 ` Benjamin Mugnier 2026-06-22 12:00 ` Myeonghun Pak
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®