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 <zhangguodong@kylinos.cn>
Reviewed-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
This commit is contained in:
ZhangGuoDong 2026-07-31 11:50:04 +00:00 committed by Namjae Jeon
parent d2ccf905f4
commit 3ce2f94919

View File

@ -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;
}