diff options
| author | Gil Portnoy <dddhkts1@gmail.com> | 2026-07-10 20:27:10 +0900 |
|---|---|---|
| committer | Steve French <stfrench@microsoft.com> | 2026-07-16 10:18:25 -0500 |
| commit | 08b9452a338db7b7f9560342a1fff30f7a58a226 (patch) | |
| tree | c7397804863b3987f068ff27b0edb16bf1579bdc /scripts/trace/git@git.tavy.me:linux-stable.git | |
| parent | b078f39af3818292687623dd433d996aef5e69c9 (diff) | |
ksmbd: fix memory leak of xattr_stream_name in smb2_rename()
On an SMB2 SET_INFO(FileRenameInformation) whose target names an alternate
data stream, smb2_rename() obtains a formatted stream-name string from
ksmbd_vfs_xattr_stream_name(), which allocates it with kasprintf() and
returns it through an out-param:
rc = ksmbd_vfs_xattr_stream_name(stream_name, &xattr_stream_name, ...);
if (rc)
goto out;
rc = ksmbd_vfs_setxattr(..., xattr_stream_name, ...);
if (rc < 0) {
...
goto out;
}
goto out;
xattr_stream_name is declared inside the alternate-data-stream block, but
the out: label is outside that block and frees only new_name, so it cannot
release xattr_stream_name. ksmbd_vfs_setxattr() takes a const char * and
only reads the name, so it does not take ownership either. Both the
setxattr-failure and the success path therefore leak the kasprintf()'d
string. An authenticated client with a writable share can leak kernel
memory on every stream rename, exhausting kernel memory over time.
Free xattr_stream_name after its use, before the block's goto out. The
two earlier goto out paths never assign the variable, so there is no
double-free.
Signed-off-by: Gil Portnoy <dddhkts1@gmail.com>
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
Diffstat (limited to 'scripts/trace/git@git.tavy.me:linux-stable.git')
0 files changed, 0 insertions, 0 deletions
