diff mbox series

[v2] usb: typec: anx7411: fix OF node reference leaks in anx7411_typec_switch_probe()

Message ID 20241116085503.3835860-1-joe@pf.is.s.u-tokyo.ac.jp (mailing list archive)
State Superseded
Headers show
Series [v2] usb: typec: anx7411: fix OF node reference leaks in anx7411_typec_switch_probe() | expand

Commit Message

Joe Hattori Nov. 16, 2024, 8:55 a.m. UTC
The refcounts of the OF nodes obtained in by of_get_child_by_name()
calls in anx7411_typec_switch_probe() are not decremented, so add
fwnode_handle_put() calls to anx7411_unregister_switch() and
anx7411_unregister_mux().

Fixes: e45d7337dc0e ("usb: typec: anx7411: Use of_get_child_by_name() instead of of_find_node_by_name()")
Cc: stable@vger.kernel.org
Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
---
Changed in v2:
- Add the Cc: stable@vger.kernel.org tag.
---
 drivers/usb/typec/anx7411.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Heikki Krogerus Nov. 19, 2024, 3:40 p.m. UTC | #1
On Sat, Nov 16, 2024 at 05:55:03PM +0900, Joe Hattori wrote:
> The refcounts of the OF nodes obtained in by of_get_child_by_name()
> calls in anx7411_typec_switch_probe() are not decremented, so add
> fwnode_handle_put() calls to anx7411_unregister_switch() and
> anx7411_unregister_mux().
> 
> Fixes: e45d7337dc0e ("usb: typec: anx7411: Use of_get_child_by_name() instead of of_find_node_by_name()")
> Cc: stable@vger.kernel.org
> Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
> ---
> Changed in v2:
> - Add the Cc: stable@vger.kernel.org tag.
> ---
>  drivers/usb/typec/anx7411.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/usb/typec/anx7411.c b/drivers/usb/typec/anx7411.c
> index cdb7e8273823..d3c5d8f410ca 100644
> --- a/drivers/usb/typec/anx7411.c
> +++ b/drivers/usb/typec/anx7411.c
> @@ -29,6 +29,8 @@
>  #include <linux/workqueue.h>
>  #include <linux/power_supply.h>
>  
> +#include "mux.h"

This should not be necessary.

>  #define TCPC_ADDRESS1		0x58
>  #define TCPC_ADDRESS2		0x56
>  #define TCPC_ADDRESS3		0x54
> @@ -1094,6 +1096,7 @@ static void anx7411_unregister_mux(struct anx7411_data *ctx)
>  {
>  	if (ctx->typec.typec_mux) {
>  		typec_mux_unregister(ctx->typec.typec_mux);
> +		fwnode_handle_put(ctx->typec.typec_mux->dev.fwnode);
>  		ctx->typec.typec_mux = NULL;
>  	}
>  }
> @@ -1102,6 +1105,7 @@ static void anx7411_unregister_switch(struct anx7411_data *ctx)
>  {
>  	if (ctx->typec.typec_switch) {
>  		typec_switch_unregister(ctx->typec.typec_switch);
> +		fwnode_handle_put(ctx->typec.typec_switch->dev.fwnode);
>  		ctx->typec.typec_switch = NULL;
>  	}
>  }

Instead of accessing the fwnode like that, add members for them to
anx7411_data.

thanks,
diff mbox series

Patch

diff --git a/drivers/usb/typec/anx7411.c b/drivers/usb/typec/anx7411.c
index cdb7e8273823..d3c5d8f410ca 100644
--- a/drivers/usb/typec/anx7411.c
+++ b/drivers/usb/typec/anx7411.c
@@ -29,6 +29,8 @@ 
 #include <linux/workqueue.h>
 #include <linux/power_supply.h>
 
+#include "mux.h"
+
 #define TCPC_ADDRESS1		0x58
 #define TCPC_ADDRESS2		0x56
 #define TCPC_ADDRESS3		0x54
@@ -1094,6 +1096,7 @@  static void anx7411_unregister_mux(struct anx7411_data *ctx)
 {
 	if (ctx->typec.typec_mux) {
 		typec_mux_unregister(ctx->typec.typec_mux);
+		fwnode_handle_put(ctx->typec.typec_mux->dev.fwnode);
 		ctx->typec.typec_mux = NULL;
 	}
 }
@@ -1102,6 +1105,7 @@  static void anx7411_unregister_switch(struct anx7411_data *ctx)
 {
 	if (ctx->typec.typec_switch) {
 		typec_switch_unregister(ctx->typec.typec_switch);
+		fwnode_handle_put(ctx->typec.typec_switch->dev.fwnode);
 		ctx->typec.typec_switch = NULL;
 	}
 }