[PATCH] drm/bridge: display-connector: fix i2c adapter leak on probe failure

Johan Hovold posted 1 patch 1 week ago
drivers/gpu/drm/bridge/display-connector.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
[PATCH] drm/bridge: display-connector: fix i2c adapter leak on probe failure
Posted by Johan Hovold 1 week ago
Make sure to drop the i2c adapter device and module references on failed
regulator and enable gpio lookup (and regulator enable) during probe
(e.g. on probe deferral).

Note that of_get_i2c_adapter_by_node() does not return error pointers,
but i2c_put_adapter() can handle a NULL argument so the error pointer
check at remove works even if it is misleading.

Fixes: 2e2bf3a5584d ("drm/bridge: display-connector: add DP support")
Fixes: 6de79dd3a920 ("drm/bridge: display-connector: add ddc-en gpio support")
Fixes: 6eb6b6f0a012 ("drm/bridge: display-connector: handle hdmi-pwr supply")
Cc: stable@vger.kernel.org	# 5.12
Cc: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Cc: H. Nikolaus Schaller <hns@goldelico.com>
Cc: Dmitry Baryshkov <lumag@kernel.org>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
---
 drivers/gpu/drm/bridge/display-connector.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/bridge/display-connector.c b/drivers/gpu/drm/bridge/display-connector.c
index 16c0631adeb1..c38de5518211 100644
--- a/drivers/gpu/drm/bridge/display-connector.c
+++ b/drivers/gpu/drm/bridge/display-connector.c
@@ -208,6 +208,13 @@ static int display_connector_get_supply(struct platform_device *pdev,
 	return PTR_ERR_OR_ZERO(conn->supply);
 }
 
+static void display_connector_put_ddc(void *_ddc)
+{
+	struct i2c_adapter *ddc = _ddc;
+
+	i2c_put_adapter(ddc);
+}
+
 static int display_connector_probe(struct platform_device *pdev)
 {
 	struct display_connector *conn;
@@ -328,6 +335,12 @@ static int display_connector_probe(struct platform_device *pdev)
 			of_node_put(phandle);
 			if (!conn->bridge.ddc)
 				return -EPROBE_DEFER;
+
+			ret = devm_add_action_or_reset(&pdev->dev,
+						       display_connector_put_ddc,
+						       conn->bridge.ddc);
+			if (ret)
+				return ret;
 		} else {
 			dev_dbg(&pdev->dev,
 				"No I2C bus specified, disabling EDID readout\n");
@@ -403,9 +416,6 @@ static void display_connector_remove(struct platform_device *pdev)
 		regulator_disable(conn->supply);
 
 	drm_bridge_remove(&conn->bridge);
-
-	if (!IS_ERR(conn->bridge.ddc))
-		i2c_put_adapter(conn->bridge.ddc);
 }
 
 static const struct of_device_id display_connector_match[] = {
-- 
2.54.0
Re: [PATCH] drm/bridge: display-connector: fix i2c adapter leak on probe failure
Posted by Laurent Pinchart 1 week ago
Hi Johan,

Thank you for the patch.

On Fri, Jul 17, 2026 at 10:57:16AM +0200, Johan Hovold wrote:
> Make sure to drop the i2c adapter device and module references on failed
> regulator and enable gpio lookup (and regulator enable) during probe
> (e.g. on probe deferral).
> 
> Note that of_get_i2c_adapter_by_node() does not return error pointers,
> but i2c_put_adapter() can handle a NULL argument so the error pointer
> check at remove works even if it is misleading.

I've already sent a fix for this, see

https://lore.kernel.org/dri-devel/20260705213542.28987-3-laurent.pinchart+renesas@ideasonboard.com/

> Fixes: 2e2bf3a5584d ("drm/bridge: display-connector: add DP support")
> Fixes: 6de79dd3a920 ("drm/bridge: display-connector: add ddc-en gpio support")
> Fixes: 6eb6b6f0a012 ("drm/bridge: display-connector: handle hdmi-pwr supply")
> Cc: stable@vger.kernel.org	# 5.12
> Cc: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
> Cc: H. Nikolaus Schaller <hns@goldelico.com>
> Cc: Dmitry Baryshkov <lumag@kernel.org>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Signed-off-by: Johan Hovold <johan@kernel.org>
> ---
>  drivers/gpu/drm/bridge/display-connector.c | 16 +++++++++++++---
>  1 file changed, 13 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/display-connector.c b/drivers/gpu/drm/bridge/display-connector.c
> index 16c0631adeb1..c38de5518211 100644
> --- a/drivers/gpu/drm/bridge/display-connector.c
> +++ b/drivers/gpu/drm/bridge/display-connector.c
> @@ -208,6 +208,13 @@ static int display_connector_get_supply(struct platform_device *pdev,
>  	return PTR_ERR_OR_ZERO(conn->supply);
>  }
>  
> +static void display_connector_put_ddc(void *_ddc)
> +{
> +	struct i2c_adapter *ddc = _ddc;
> +
> +	i2c_put_adapter(ddc);
> +}
> +
>  static int display_connector_probe(struct platform_device *pdev)
>  {
>  	struct display_connector *conn;
> @@ -328,6 +335,12 @@ static int display_connector_probe(struct platform_device *pdev)
>  			of_node_put(phandle);
>  			if (!conn->bridge.ddc)
>  				return -EPROBE_DEFER;
> +
> +			ret = devm_add_action_or_reset(&pdev->dev,
> +						       display_connector_put_ddc,
> +						       conn->bridge.ddc);
> +			if (ret)
> +				return ret;
>  		} else {
>  			dev_dbg(&pdev->dev,
>  				"No I2C bus specified, disabling EDID readout\n");
> @@ -403,9 +416,6 @@ static void display_connector_remove(struct platform_device *pdev)
>  		regulator_disable(conn->supply);
>  
>  	drm_bridge_remove(&conn->bridge);
> -
> -	if (!IS_ERR(conn->bridge.ddc))
> -		i2c_put_adapter(conn->bridge.ddc);
>  }
>  
>  static const struct of_device_id display_connector_match[] = {

-- 
Regards,

Laurent Pinchart
Re: [PATCH] drm/bridge: display-connector: fix i2c adapter leak on probe failure
Posted by Johan Hovold 1 week ago
On Fri, Jul 17, 2026 at 03:20:35PM +0300, Laurent Pinchart wrote:

> On Fri, Jul 17, 2026 at 10:57:16AM +0200, Johan Hovold wrote:
> > Make sure to drop the i2c adapter device and module references on failed
> > regulator and enable gpio lookup (and regulator enable) during probe
> > (e.g. on probe deferral).
> > 
> > Note that of_get_i2c_adapter_by_node() does not return error pointers,
> > but i2c_put_adapter() can handle a NULL argument so the error pointer
> > check at remove works even if it is misleading.
> 
> I've already sent a fix for this, see
> 
> https://lore.kernel.org/dri-devel/20260705213542.28987-3-laurent.pinchart+renesas@ideasonboard.com/

Ah, ok. If that series is blocked perhaps you can send the fix
separately.

Johan
Re: [PATCH] drm/bridge: display-connector: fix i2c adapter leak on probe failure
Posted by Laurent Pinchart 1 week ago
On Fri, Jul 17, 2026 at 04:51:52PM +0200, Johan Hovold wrote:
> On Fri, Jul 17, 2026 at 03:20:35PM +0300, Laurent Pinchart wrote:
> > On Fri, Jul 17, 2026 at 10:57:16AM +0200, Johan Hovold wrote:
> > > Make sure to drop the i2c adapter device and module references on failed
> > > regulator and enable gpio lookup (and regulator enable) during probe
> > > (e.g. on probe deferral).
> > > 
> > > Note that of_get_i2c_adapter_by_node() does not return error pointers,
> > > but i2c_put_adapter() can handle a NULL argument so the error pointer
> > > check at remove works even if it is misleading.
> > 
> > I've already sent a fix for this, see
> > 
> > https://lore.kernel.org/dri-devel/20260705213542.28987-3-laurent.pinchart+renesas@ideasonboard.com/
> 
> Ah, ok. If that series is blocked perhaps you can send the fix
> separately.

Done.

https://lore.kernel.org/dri-devel/20260717184836.2017386-1-laurent.pinchart+renesas@ideasonboard.com

-- 
Regards,

Laurent Pinchart