[PATCH net] devlink: Release nested relation on devlink free

Mark Bloch posted 1 patch 1 week, 3 days ago
net/devlink/core.c | 2 ++
1 file changed, 2 insertions(+)
[PATCH net] devlink: Release nested relation on devlink free
Posted by Mark Bloch 1 week, 3 days ago
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>
---
 net/devlink/core.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/net/devlink/core.c b/net/devlink/core.c
index eeb6a71f5f56..fe9f6a0a67d5 100644
--- a/net/devlink/core.c
+++ b/net/devlink/core.c
@@ -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));

base-commit: 8d26955ea5a4697c1e21a3869ceb36b90389b051
-- 
2.34.1
Re: [PATCH net] devlink: Release nested relation on devlink free
Posted by Jiri Pirko 1 week, 3 days ago
Thu, May 28, 2026 at 09:14:10PM +0200, mbloch@nvidia.com wrote:
>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>