]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
RDMA/rtrs: Fix use-after-free in path file creation cleanup
authorGuangshuo Li <lgs201920130244@gmail.com>
Thu, 14 May 2026 11:38:34 +0000 (19:38 +0800)
committerLeon Romanovsky <leon@kernel.org>
Tue, 19 May 2026 22:32:48 +0000 (19:32 -0300)
In the error path of rtrs_srv_create_path_files(), the sysfs root folders
may already have been created and srv_path->kobj may already have been
initialized. If a later step fails, the cleanup currently calls
kobject_put(&srv_path->kobj) before
rtrs_srv_destroy_once_sysfs_root_folders(srv_path).

kobject_put() may drop the last reference to srv_path->kobj and invoke the
release callback, rtrs_srv_release(), which frees srv_path. The following
call to rtrs_srv_destroy_once_sysfs_root_folders(srv_path) then
dereferences srv_path internally to access srv_path->srv, resulting in a
use-after-free.

This failure path is reached before rtrs_srv_create_path_files() returns
success, so the successful-path lifetime handling is not involved.

Fix this by destroying the sysfs root folders before calling
kobject_put(&srv_path->kobj), so srv_path is still valid while the helper
accesses it.

This issue was found by a static analysis tool I am developing.

Fixes: ae4c81644e91 ("RDMA/rtrs-srv: Rename rtrs_srv_sess to rtrs_srv_path")
Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
Link: https://patch.msgid.link/20260514113834.865530-1-lgs201920130244@gmail.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/ulp/rtrs/rtrs-srv-sysfs.c

index 51727c7d710c39a99ebd15d4734a7c713aa02374..9dd9141c86a54c17183a19cf7805856ba813b0dc 100644 (file)
@@ -295,8 +295,8 @@ remove_group:
 put_kobj:
        kobject_del(&srv_path->kobj);
 destroy_root:
-       kobject_put(&srv_path->kobj);
        rtrs_srv_destroy_once_sysfs_root_folders(srv_path);
+       kobject_put(&srv_path->kobj);
 
        return err;
 }