| From 946f6644e70b66a1d64e30691cc8f56717617e55 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 30 Dec 2024 20:54:11 +0100 |
| Subject: cifs: Fix calling CIFSFindFirst() for root path without msearch |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Pali Rohár <pali@kernel.org> |
| |
| [ Upstream commit b460249b9a1dab7a9f58483e5349d045ad6d585c ] |
| |
| To query root path (without msearch wildcard) it is needed to |
| send pattern '\' instead of '' (empty string). |
| |
| This allows to use CIFSFindFirst() to query information about root path |
| which is being used in followup changes. |
| |
| This change fixes the stat() syscall called on the root path on the mount. |
| It is because stat() syscall uses the cifs_query_path_info() function and |
| it can fallback to the CIFSFindFirst() usage with msearch=false. |
| |
| Signed-off-by: Pali Rohár <pali@kernel.org> |
| Signed-off-by: Steve French <stfrench@microsoft.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| fs/smb/client/cifssmb.c | 10 ++++++++++ |
| 1 file changed, 10 insertions(+) |
| |
| diff --git a/fs/smb/client/cifssmb.c b/fs/smb/client/cifssmb.c |
| index 0c6ade196894..49d772683004 100644 |
| --- a/fs/smb/client/cifssmb.c |
| +++ b/fs/smb/client/cifssmb.c |
| @@ -3933,6 +3933,12 @@ CIFSFindFirst(const unsigned int xid, struct cifs_tcon *tcon, |
| pSMB->FileName[name_len] = 0; |
| pSMB->FileName[name_len+1] = 0; |
| name_len += 2; |
| + } else if (!searchName[0]) { |
| + pSMB->FileName[0] = CIFS_DIR_SEP(cifs_sb); |
| + pSMB->FileName[1] = 0; |
| + pSMB->FileName[2] = 0; |
| + pSMB->FileName[3] = 0; |
| + name_len = 4; |
| } |
| } else { |
| name_len = copy_path_name(pSMB->FileName, searchName); |
| @@ -3944,6 +3950,10 @@ CIFSFindFirst(const unsigned int xid, struct cifs_tcon *tcon, |
| pSMB->FileName[name_len] = '*'; |
| pSMB->FileName[name_len+1] = 0; |
| name_len += 2; |
| + } else if (!searchName[0]) { |
| + pSMB->FileName[0] = CIFS_DIR_SEP(cifs_sb); |
| + pSMB->FileName[1] = 0; |
| + name_len = 2; |
| } |
| } |
| |
| -- |
| 2.39.5 |
| |