]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
devlink: Release nested relation on devlink free
authorMark Bloch <mbloch@nvidia.com>
Thu, 28 May 2026 19:14:10 +0000 (22:14 +0300)
committerJakub Kicinski <kuba@kernel.org>
Tue, 2 Jun 2026 02:54:52 +0000 (19:54 -0700)
devlink relation state is normally released from devl_unregister(), which
calls devlink_rel_put(). This misses devlink instances that get a nested
relation before registration and then fail probe before devl_register() is
reached.

That flow can happen for SFs. The child devlink gets linked to its
parent before registration, then a later probe error calls devlink_free()
directly. Since the instance was never registered, devl_unregister() is not
called and devlink->rel is leaked.

Release any pending relation from devlink_free() as well. The registered
path is unchanged because devl_unregister() already clears devlink->rel
before devlink_free() runs.

Fixes: c137743bce02 ("devlink: introduce object and nested devlink relationship infra")
Signed-off-by: Mark Bloch <mbloch@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Link: https://patch.msgid.link/20260528191411.3270532-1-mbloch@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/devlink/core.c

index eeb6a71f5f56ef0538da07d42d25f92473cd275b..fe9f6a0a67d5b38372b7fdf82cd0ea8b95d4e62d 100644 (file)
@@ -518,6 +518,8 @@ void devlink_free(struct devlink *devlink)
 {
        ASSERT_DEVLINK_NOT_REGISTERED(devlink);
 
+       devlink_rel_put(devlink);
+
        WARN_ON(!list_empty(&devlink->trap_policer_list));
        WARN_ON(!list_empty(&devlink->trap_group_list));
        WARN_ON(!list_empty(&devlink->trap_list));