]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
smb: client: short-circuit in open_cached_dir_by_dentry() if !dentry
authorHenrique Carvalho <henrique.carvalho@suse.com>
Thu, 18 Sep 2025 21:39:51 +0000 (18:39 -0300)
committerSteve French <stfrench@microsoft.com>
Thu, 2 Oct 2025 03:42:15 +0000 (22:42 -0500)
When dentry is NULL, the current code acquires the spinlock and traverses
the entire list, but the condition (dentry && cfid->dentry == dentry)
ensures no match will ever be found.

Return -ENOENT early in this case, avoiding unnecessary lock acquisition
and list traversal.

Signed-off-by: Henrique Carvalho <henrique.carvalho@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/client/cached_dir.c

index 03bfb919ad477f17c7ccbbdac1651363a9fce60d..b36f9f9340f008ec5b94d87b908d7e177ddd5197 100644 (file)
@@ -416,9 +416,12 @@ int open_cached_dir_by_dentry(struct cifs_tcon *tcon,
        if (cfids == NULL)
                return -EOPNOTSUPP;
 
+       if (!dentry)
+               return -ENOENT;
+
        spin_lock(&cfids->cfid_list_lock);
        list_for_each_entry(cfid, &cfids->entries, entry) {
-               if (dentry && cfid->dentry == dentry) {
+               if (cfid->dentry == dentry) {
                        if (!is_valid_cached_dir(cfid))
                                break;
                        cifs_dbg(FYI, "found a cached file handle by dentry\n");