summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWang Zhaolong <wangzhaolong1@huawei.com>2025-05-16 17:12:56 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-06-04 14:37:08 +0200
commitefe12747997bce7be9e9a13731ccba7b38403083 (patch)
tree5a0362195f639bf2f38406179d6ff5ed79522f57
parenta24c2f05ac3c5b0aaa539d9d913826d2643dfd0e (diff)
downloadlinux-efe12747997bce7be9e9a13731ccba7b38403083.tar.gz
linux-efe12747997bce7be9e9a13731ccba7b38403083.tar.bz2
linux-efe12747997bce7be9e9a13731ccba7b38403083.zip
smb: client: Reset all search buffer pointers when releasing buffer
commit e48f9d849bfdec276eebf782a84fd4dfbe1c14c0 upstream. Multiple pointers in struct cifs_search_info (ntwrk_buf_start, srch_entries_start, and last_entry) point to the same allocated buffer. However, when freeing this buffer, only ntwrk_buf_start was set to NULL, while the other pointers remained pointing to freed memory. This is defensive programming to prevent potential issues with stale pointers. While the active UAF vulnerability is fixed by the previous patch, this change ensures consistent pointer state and more robust error handling. Signed-off-by: Wang Zhaolong <wangzhaolong1@huawei.com> Cc: stable@vger.kernel.org Reviewed-by: Paulo Alcantara (Red Hat) <pc@manguebit.com> Signed-off-by: Steve French <stfrench@microsoft.com> Signed-off-by: Wang Zhaolong <wangzhaolong1@huawei.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--fs/cifs/readdir.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
index a7a9391214c1..9e62d75f2465 100644
--- a/fs/cifs/readdir.c
+++ b/fs/cifs/readdir.c
@@ -755,7 +755,10 @@ find_cifs_entry(const unsigned int xid, struct cifs_tcon *tcon, loff_t pos,
else
cifs_buf_release(cfile->srch_inf.
ntwrk_buf_start);
+ /* Reset all pointers to the network buffer to prevent stale references */
cfile->srch_inf.ntwrk_buf_start = NULL;
+ cfile->srch_inf.srch_entries_start = NULL;
+ cfile->srch_inf.last_entry = NULL;
}
rc = initiate_cifs_search(xid, file, full_path);
if (rc) {