Kernel Tree For Xiaomi 11 Lite NE 5G
Go to file
Sungjong Seo 803d714374 exfat: release s_lock before calling dir_emit()
There is a potential deadlock reported by syzbot as below:

======================================================
WARNING: possible circular locking dependency detected
6.4.0-next-20230707-syzkaller #0 Not tainted
------------------------------------------------------
syz-executor330/5073 is trying to acquire lock:
ffff8880218527a0 (&mm->mmap_lock){++++}-{3:3}, at: mmap_read_lock_killable include/linux/mmap_lock.h:151 [inline]
ffff8880218527a0 (&mm->mmap_lock){++++}-{3:3}, at: get_mmap_lock_carefully mm/memory.c:5293 [inline]
ffff8880218527a0 (&mm->mmap_lock){++++}-{3:3}, at: lock_mm_and_find_vma+0x369/0x510 mm/memory.c:5344
but task is already holding lock:
ffff888019f760e0 (&sbi->s_lock){+.+.}-{3:3}, at: exfat_iterate+0x117/0xb50 fs/exfat/dir.c:232

which lock already depends on the new lock.

Chain exists of:
  &mm->mmap_lock --> mapping.invalidate_lock#3 --> &sbi->s_lock

 Possible unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock(&sbi->s_lock);
                               lock(mapping.invalidate_lock#3);
                               lock(&sbi->s_lock);
  rlock(&mm->mmap_lock);

Let's try to avoid above potential deadlock condition by moving dir_emit*()
out of sbi->s_lock coverage.

Fixes: ca06197382bd ("exfat: add directory operations")
Cc: stable@vger.kernel.org #v5.7+
Reported-by: syzbot+1741a5d9b79989c10bdc@syzkaller.appspotmail.com
Link: https://lore.kernel.org/lkml/00000000000078ee7e060066270b@google.com/T/#u
Signed-off-by: Sungjong Seo <sj1557.seo@samsung.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2023-07-15 23:12:22 +09:00
.github/workflows exfat: github action: make space for running xfstests 2023-07-14 17:08:12 +09:00
balloc.c exfat: use kvmalloc_array/kvfree instead of kmalloc_array/kfree 2023-07-12 23:32:11 +09:00
cache.c exfat: fix use of uninitialized spinlock on error path 2020-10-12 22:56:52 +09:00
dir.c exfat: release s_lock before calling dir_emit() 2023-07-15 23:12:22 +09:00
exfat_fs.h exfat: fs: port ->getattr() to pass mnt_idmap 2023-07-11 22:20:50 +09:00
exfat_raw.h exfat: handle unreconized benign secondary entries 2023-01-13 22:53:51 +09:00
fatent.c exfat: fix the newly allocated clusters are not freed in error handling 2023-07-11 22:20:45 +09:00
file.c exfat: splice: Use filemap_splice_read() instead of generic_file_splice_read() 2023-07-11 22:35:55 +09:00
inode.c exfat: remove ->writepage 2023-07-11 22:20:39 +09:00
Kconfig exfat: fs: build the legacy direct I/O code conditionally 2023-07-11 22:35:47 +09:00
Makefile exfat: fix typo in Makefile 2021-10-14 22:24:23 -07:00
misc.c exfat: Expand exfat_err() and co directly to pr_*() macro 2022-07-29 17:26:04 +09:00
namei.c exfat: fs: port ->rename() to pass mnt_idmap 2023-07-11 22:34:25 +09:00
nls.c exfat: Drop superfluous new line for error messages 2022-07-29 17:26:12 +09:00
README.md exfat: fix typo 2020-02-10 21:35:58 +09:00
super.c exfat: fix inode->i_blocks for non-512 byte sector size device 2023-01-08 18:15:09 +09:00

exFAT filesystem

This is the exfat filesystem for support from the linux 4.1 kernel to the latest kernel.

Installing as a stand-alone module

Install prerequisite package for Fedora, RHEL:

	yum install kernel-devel-$(uname -r)

Build step:

	make
	sudo make install

To load the driver manually, run this as root:

	modprobe exfat

Installing as a part of the kernel

  1. Let's take [linux] as the path to your kernel source dir.
	cd [linux]
	cp -ar exfat [linux]/fs/
  1. edit [linux]/fs/Kconfig
	source "fs/fat/Kconfig"
	+source "fs/exfat/Kconfig"
	source "fs/ntfs/Kconfig"
  1. edit [linux]/fs/Makefile
	obj-$(CONFIG_FAT_FS)          += fat/
	+obj-$(CONFIG_EXFAT_FS)       += exfat/
	obj-$(CONFIG_BFS_FS)          += bfs/
  1. make menuconfig and set exfat
	File systems  --->
		DOS/FAT/NT Filesystems  --->
			<M> exFAT filesystem support
			(utf8) Default iocharset for exFAT

build your kernel