* [PATCH net] net: pse-pd: pd692x0: Fix power budget leak in manager setup error path
@ 2025-08-20 13:27 Kory Maincent
2025-08-20 14:08 ` Markus Elfring
2025-08-21 15:00 ` patchwork-bot+netdevbpf
0 siblings, 2 replies; 3+ messages in thread
From: Kory Maincent @ 2025-08-20 13:27 UTC (permalink / raw)
To: Jakub Kicinski, Oleksij Rempel, Kory Maincent (Dent Project),
netdev, linux-kernel
Cc: thomas.petazzoni, Andrew Lunn, David S. Miller, Eric Dumazet,
Paolo Abeni
Fix a resource leak where manager power budgets were freed on both
success and error paths during manager setup. Power budgets should
only be freed on error paths after regulator registration or during
driver removal.
Refactor cleanup logic by extracting OF node cleanup and power budget
freeing into separate helper functions for better maintainability.
Fixes: 359754013e6a ("net: pse-pd: pd692x0: Add support for PSE PI priority feature")
Signed-off-by: Kory Maincent <kory.maincent@bootlin.com>
---
drivers/net/pse-pd/pd692x0.c | 59 +++++++++++++++++++++++++++---------
1 file changed, 44 insertions(+), 15 deletions(-)
diff --git a/drivers/net/pse-pd/pd692x0.c b/drivers/net/pse-pd/pd692x0.c
index 399ce9febda4..395f6c662175 100644
--- a/drivers/net/pse-pd/pd692x0.c
+++ b/drivers/net/pse-pd/pd692x0.c
@@ -1162,12 +1162,44 @@ pd692x0_write_ports_matrix(struct pd692x0_priv *priv,
return 0;
}
+static void pd692x0_of_put_managers(struct pd692x0_priv *priv,
+ struct pd692x0_manager *manager,
+ int nmanagers)
+{
+ int i, j;
+
+ for (i = 0; i < nmanagers; i++) {
+ for (j = 0; j < manager[i].nports; j++)
+ of_node_put(manager[i].port_node[j]);
+ of_node_put(manager[i].node);
+ }
+}
+
+static void pd692x0_managers_free_pw_budget(struct pd692x0_priv *priv)
+{
+ int i;
+
+ for (i = 0; i < PD692X0_MAX_MANAGERS; i++) {
+ struct regulator *supply;
+
+ if (!priv->manager_reg[i] || !priv->manager_pw_budget[i])
+ continue;
+
+ supply = priv->manager_reg[i]->supply;
+ if (!supply)
+ continue;
+
+ regulator_free_power_budget(supply,
+ priv->manager_pw_budget[i]);
+ }
+}
+
static int pd692x0_setup_pi_matrix(struct pse_controller_dev *pcdev)
{
struct pd692x0_manager *manager __free(kfree) = NULL;
struct pd692x0_priv *priv = to_pd692x0_priv(pcdev);
struct pd692x0_matrix port_matrix[PD692X0_MAX_PIS];
- int ret, i, j, nmanagers;
+ int ret, nmanagers;
/* Should we flash the port matrix */
if (priv->fw_state != PD692X0_FW_OK &&
@@ -1185,31 +1217,27 @@ static int pd692x0_setup_pi_matrix(struct pse_controller_dev *pcdev)
nmanagers = ret;
ret = pd692x0_register_managers_regulator(priv, manager, nmanagers);
if (ret)
- goto out;
+ goto err_of_managers;
ret = pd692x0_configure_managers(priv, nmanagers);
if (ret)
- goto out;
+ goto err_of_managers;
ret = pd692x0_set_ports_matrix(priv, manager, nmanagers, port_matrix);
if (ret)
- goto out;
+ goto err_managers_req_pw;
ret = pd692x0_write_ports_matrix(priv, port_matrix);
if (ret)
- goto out;
+ goto err_managers_req_pw;
-out:
- for (i = 0; i < nmanagers; i++) {
- struct regulator *supply = priv->manager_reg[i]->supply;
-
- regulator_free_power_budget(supply,
- priv->manager_pw_budget[i]);
+ pd692x0_of_put_managers(priv, manager, nmanagers);
+ return 0;
- for (j = 0; j < manager[i].nports; j++)
- of_node_put(manager[i].port_node[j]);
- of_node_put(manager[i].node);
- }
+err_managers_req_pw:
+ pd692x0_managers_free_pw_budget(priv);
+err_of_managers:
+ pd692x0_of_put_managers(priv, manager, nmanagers);
return ret;
}
@@ -1748,6 +1776,7 @@ static void pd692x0_i2c_remove(struct i2c_client *client)
{
struct pd692x0_priv *priv = i2c_get_clientdata(client);
+ pd692x0_managers_free_pw_budget(priv);
firmware_upload_unregister(priv->fwl);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH net] net: pse-pd: pd692x0: Fix power budget leak in manager setup error path
2025-08-20 13:27 [PATCH net] net: pse-pd: pd692x0: Fix power budget leak in manager setup error path Kory Maincent
@ 2025-08-20 14:08 ` Markus Elfring
2025-08-21 15:00 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: Markus Elfring @ 2025-08-20 14:08 UTC (permalink / raw)
To: Kory Maincent, netdev, Jakub Kicinski, Oleksij Rempel
Cc: LKML, Andrew Lunn, David S. Miller, Eric Dumazet, Paolo Abeni,
Thomas Petazzoni
…
> +++ b/drivers/net/pse-pd/pd692x0.c
…
> @@ -1185,31 +1217,27 @@ static int pd692x0_setup_pi_matrix(struct pse_controller_dev *pcdev)
…
> + pd692x0_of_put_managers(priv, manager, nmanagers);
> + return 0;
How do you think about to apply the following code variant?
ret = 0;
goto put_managers;
>
> - for (j = 0; j < manager[i].nports; j++)
> - of_node_put(manager[i].port_node[j]);
> - of_node_put(manager[i].node);
> - }
> +err_managers_req_pw:
free_pw_budget:
> + pd692x0_managers_free_pw_budget(priv);
> +err_of_managers:
put_managers:
> + pd692x0_of_put_managers(priv, manager, nmanagers);
> return ret;
> }
…
Regards,
Markus
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH net] net: pse-pd: pd692x0: Fix power budget leak in manager setup error path
2025-08-20 13:27 [PATCH net] net: pse-pd: pd692x0: Fix power budget leak in manager setup error path Kory Maincent
2025-08-20 14:08 ` Markus Elfring
@ 2025-08-21 15:00 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: patchwork-bot+netdevbpf @ 2025-08-21 15:00 UTC (permalink / raw)
To: Kory Maincent
Cc: kuba, o.rempel, netdev, linux-kernel, thomas.petazzoni,
andrew+netdev, davem, edumazet, pabeni
Hello:
This patch was applied to netdev/net.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Wed, 20 Aug 2025 15:27:07 +0200 you wrote:
> Fix a resource leak where manager power budgets were freed on both
> success and error paths during manager setup. Power budgets should
> only be freed on error paths after regulator registration or during
> driver removal.
>
> Refactor cleanup logic by extracting OF node cleanup and power budget
> freeing into separate helper functions for better maintainability.
>
> [...]
Here is the summary with links:
- [net] net: pse-pd: pd692x0: Fix power budget leak in manager setup error path
https://git.kernel.org/netdev/net/c/1c67f9c54cdc
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-08-21 15:00 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-20 13:27 [PATCH net] net: pse-pd: pd692x0: Fix power budget leak in manager setup error path Kory Maincent
2025-08-20 14:08 ` Markus Elfring
2025-08-21 15:00 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox