]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
devlink: Fix parent ref leak in devl_rate_node_create()
authorCosmin Ratiu <cratiu@nvidia.com>
Tue, 16 Jun 2026 11:06:32 +0000 (14:06 +0300)
committerJakub Kicinski <kuba@kernel.org>
Fri, 19 Jun 2026 01:02:29 +0000 (18:02 -0700)
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>
net/devlink/rate.c

index 41be2d6c2954e925ea0798491617f96bd04ed9fd..210e26c6cfa04c68ce3184ac4df434c68a6ef28c 100644 (file)
@@ -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);