]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
cifs: Fix calling CIFSFindFirst() for root path without msearch
authorPali Rohár <pali@kernel.org>
Mon, 30 Dec 2024 19:54:11 +0000 (20:54 +0100)
committerSteve French <stfrench@microsoft.com>
Sun, 27 Jul 2025 21:59:59 +0000 (16:59 -0500)
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>
fs/smb/client/cifssmb.c

index 75142f49d65dd6f0e36e42ea5a08fcdeacb49157..3b6bc53ee1c4d68ff84951003df43644052e5c06 100644 (file)
@@ -4020,6 +4020,12 @@ findFirstRetry:
                        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);
@@ -4031,6 +4037,10 @@ findFirstRetry:
                        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;
                }
        }