]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
exfat: fix exfat_find_empty_entry() not returning error on failure
authorYuezhang Mo <Yuezhang.Mo@sony.com>
Mon, 2 Dec 2024 01:53:17 +0000 (09:53 +0800)
committerNamjae Jeon <linkinjeon@kernel.org>
Tue, 17 Dec 2024 11:21:59 +0000 (20:21 +0900)
On failure, "dentry" is the error code. If the error code indicates
that there is no space, a new cluster may need to be allocated; for
other errors, it should be returned directly.

Only on success, "dentry" is the index of the directory entry, and
it needs to be converted into the directory entry index within the
cluster where it is located.

Fixes: 8a3f5711ad74 ("exfat: reduce FAT chain traversal")
Reported-by: syzbot+6f6c9397e0078ef60bce@syzkaller.appspotmail.com
Tested-by: syzbot+6f6c9397e0078ef60bce@syzkaller.appspotmail.com
Signed-off-by: Yuezhang Mo <Yuezhang.Mo@sony.com>
Reviewed-by: Sungjong Seo <sj1557.seo@samsung.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
fs/exfat/namei.c

index 97d2774760fe3dead731bc01c02d1764014ec0cc..099f8064507213946aa8838ad65dc4a240fe6864 100644 (file)
@@ -330,8 +330,8 @@ static int exfat_find_empty_entry(struct inode *inode,
 
        while ((dentry = exfat_search_empty_slot(sb, &hint_femp, p_dir,
                                        num_entries, es)) < 0) {
-               if (dentry == -EIO)
-                       break;
+               if (dentry != -ENOSPC)
+                       return dentry;
 
                if (exfat_check_max_dentries(inode))
                        return -ENOSPC;