]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
exfat: add cluster chain loop check for dir
authorYuezhang Mo <Yuezhang.Mo@sony.com>
Tue, 18 Mar 2025 09:00:49 +0000 (17:00 +0800)
committerNamjae Jeon <linkinjeon@kernel.org>
Thu, 31 Jul 2025 23:34:23 +0000 (08:34 +0900)
commit99f9a97dce39ad413c39b92c90393bbd6778f3fd
treec6b2200e07c350ca83328e62571714053d655938
parent2f2d42a17b5a6711378d39df74f1f69a831c5d4e
exfat: add cluster chain loop check for dir

An infinite loop may occur if the following conditions occur due to
file system corruption.

(1) Condition for exfat_count_dir_entries() to loop infinitely.
    - The cluster chain includes a loop.
    - There is no UNUSED entry in the cluster chain.

(2) Condition for exfat_create_upcase_table() to loop infinitely.
    - The cluster chain of the root directory includes a loop.
    - There are no UNUSED entry and up-case table entry in the cluster
      chain of the root directory.

(3) Condition for exfat_load_bitmap() to loop infinitely.
    - The cluster chain of the root directory includes a loop.
    - There are no UNUSED entry and bitmap entry in the cluster chain
      of the root directory.

(4) Condition for exfat_find_dir_entry() to loop infinitely.
    - The cluster chain includes a loop.
    - The unused directory entries were exhausted by some operation.

(5) Condition for exfat_check_dir_empty() to loop infinitely.
    - The cluster chain includes a loop.
    - The unused directory entries were exhausted by some operation.
    - All files and sub-directories under the directory are deleted.

This commit adds checks to break the above infinite loop.

Signed-off-by: Yuezhang Mo <Yuezhang.Mo@sony.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
fs/exfat/dir.c
fs/exfat/fatent.c
fs/exfat/namei.c
fs/exfat/super.c