Skip to content
Snippets Groups Projects
Commit 4f9180e5 authored by Yuezhang Mo's avatar Yuezhang Mo Committed by Frieder Schrempf
Browse files

exfat: fix the infinite loop in __exfat_free_cluster()


[ Upstream commit a5324b3a488d883aa2d42f72260054e87d0940a0 ]

In __exfat_free_cluster(), the cluster chain is traversed until the
EOF cluster. If the cluster chain includes a loop due to file system
corruption, the EOF cluster cannot be traversed, resulting in an
infinite loop.

This commit uses the total number of clusters to prevent this infinite
loop.

Reported-by: default avatar <syzbot+1de5a37cb85a2d536330@syzkaller.appspotmail.com>
Closes: https://syzkaller.appspot.com/bug?extid=1de5a37cb85a2d536330


Tested-by: default avatar <syzbot+1de5a37cb85a2d536330@syzkaller.appspotmail.com>
Fixes: 31023864 ("exfat: add fat entry operations")
Signed-off-by: default avatarYuezhang Mo <Yuezhang.Mo@sony.com>
Reviewed-by: default avatarSungjong Seo <sj1557.seo@samsung.com>
Signed-off-by: default avatarNamjae Jeon <linkinjeon@kernel.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 852f5599
No related branches found
No related tags found
1 merge request!184🤖 Sync Bot: Update v6.1-ktn to Latest Stable Kernel (v6.1.128)
...@@ -216,6 +216,16 @@ static int __exfat_free_cluster(struct inode *inode, struct exfat_chain *p_chain ...@@ -216,6 +216,16 @@ static int __exfat_free_cluster(struct inode *inode, struct exfat_chain *p_chain
if (err) if (err)
goto dec_used_clus; goto dec_used_clus;
if (num_clusters >= sbi->num_clusters - EXFAT_FIRST_CLUSTER) {
/*
* The cluster chain includes a loop, scan the
* bitmap to get the number of used clusters.
*/
exfat_count_used_clusters(sb, &sbi->used_clusters);
return 0;
}
} while (clu != EXFAT_EOF_CLUSTER); } while (clu != EXFAT_EOF_CLUSTER);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment