From 3ce2f9491963c9c9c02129deaf7e8a0809775e97 Mon Sep 17 00:00:00 2001 From: ZhangGuoDong Date: Fri, 31 Jul 2026 11:50:04 +0000 Subject: [PATCH] smb/server: fix memory leak in ksmbd_vfs_set_durable_owner() See the procedure below: smb2_open ksmbd_vfs_set_durable_owner fp->owner.name = name // When the connection goes away ksmbd_sessions_deregister ksmbd_session_destroy ksmbd_destroy_file_table __close_file_table_ids session_fd_check // skip() ksmbd_vfs_set_durable_owner fp->owner.name = name // memory leak Signed-off-by: ZhangGuoDong Reviewed-by: ChenXiaoSong Signed-off-by: Namjae Jeon --- fs/smb/server/vfs_cache.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/smb/server/vfs_cache.c b/fs/smb/server/vfs_cache.c index c28e3d65d64b..5acd06020d42 100644 --- a/fs/smb/server/vfs_cache.c +++ b/fs/smb/server/vfs_cache.c @@ -1655,7 +1655,7 @@ void ksmbd_stop_durable_scavenger(void) int ksmbd_vfs_set_durable_owner(struct ksmbd_file *fp, struct ksmbd_user *user) { - char *name; + char *name, *old_name; if (!user) return -EINVAL; @@ -1666,10 +1666,12 @@ int ksmbd_vfs_set_durable_owner(struct ksmbd_file *fp, return -ENOMEM; spin_lock(&fp->f_lock); + old_name = fp->owner.name; fp->owner.uid = user->uid; fp->owner.gid = user->gid; fp->owner.name = name; spin_unlock(&fp->f_lock); + kfree(old_name); return 0; }