mirror of
https://github.com/torvalds/linux.git
synced 2026-10-05 19:34:02 +02:00
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:
parent
d2ccf905f4
commit
3ce2f94919
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user