aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
authorCosmin Ratiu <cratiu@nvidia.com>2026-06-16 14:06:32 +0300
committerJakub Kicinski <kuba@kernel.org>2026-06-18 18:02:29 -0700
commitba45106342bbdd905651cb9fcefb8c11871d4c25 (patch)
treeefd167d7676ceecc78e589864b4cba8889476e58 /net
parent8cdcf3d2caacdee7ddd363705fb4d93b0c1a0915 (diff)
downloadath-ba45106342bbdd905651cb9fcefb8c11871d4c25.tar.gz
devlink: Fix parent ref leak in devl_rate_node_create()
In the original commit the function bails out on kstrdup failure, forgetting to decrement the refcnt of the parent. Fix that by moving the parent refcnt setting after kstrdup. Fixes: caba177d7f4d ("devlink: Enable creation of the devlink-rate nodes from the driver") Signed-off-by: Cosmin Ratiu <cratiu@nvidia.com> Reviewed-by: Carolina Jubran <cjubran@nvidia.com> Reviewed-by: Simon Horman <horms@kernel.org> Link: https://patch.msgid.link/20260616110633.1449432-2-cratiu@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net')
-rw-r--r--net/devlink/rate.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/net/devlink/rate.c b/net/devlink/rate.c
index 41be2d6c2954e..210e26c6cfa04 100644
--- a/net/devlink/rate.c
+++ b/net/devlink/rate.c
@@ -725,11 +725,6 @@ devl_rate_node_create(struct devlink *devlink, void *priv, char *node_name,
if (!rate_node)
return ERR_PTR(-ENOMEM);
- if (parent) {
- rate_node->parent = parent;
- refcount_inc(&rate_node->parent->refcnt);
- }
-
rate_node->type = DEVLINK_RATE_TYPE_NODE;
rate_node->devlink = devlink;
rate_node->priv = priv;
@@ -740,6 +735,11 @@ devl_rate_node_create(struct devlink *devlink, void *priv, char *node_name,
return ERR_PTR(-ENOMEM);
}
+ if (parent) {
+ rate_node->parent = parent;
+ refcount_inc(&rate_node->parent->refcnt);
+ }
+
refcount_set(&rate_node->refcnt, 1);
list_add(&rate_node->list, &devlink->rate_list);
devlink_rate_notify(rate_node, DEVLINK_CMD_RATE_NEW);