android_kernel_motorola_sm6225/fs/exfat
a17671 c62f7d037b exfat:Fix panic of handlings of unhashed alias
Unhashed alias is allowed to exist
In the latest upstream kernel exfat driver
It does not have to generate panic in this case
Porting this handling to exfat-nofuse driver from url
https://git.kernel.org/pub/scm/linux/kernel/git/
stable/linux.git/tree/fs/exfat/namei.c?h=v5.10.8#n724

Panic stack trace:
kernel BUG at ../../motorola/kernel/modules/fs/exfat/exfat_super.c:874!
[  759.284483] pc : exfat_lookup+0x1dc/0x1e0 [exfat]
[  759.284496] lr : exfat_lookup+0x144/0x1e0 [exfat]
[  759.284502] sp : ffffff800ea2b9d0
[  759.284507] x29: ffffff800ea2ba20 x28: fffffff6f3cf8000
[  759.284515] x27: 0000000000000000 x26: 0000000000000000
[  759.284523] x25: 0000000056000000 x24: fffffff7b8742d88
[  759.284530] x23: 0000000000004000 x22: fffffff883b08390
[  759.284538] x21: fffffff7b874b228 x20: fffffff86d375000
[  759.284546] x19: fffffff883b08980 x18: 0000000007270df4
[  759.284553] x17: 0000000000000000 x16: ffffff9bebd5c9b8
[  759.284561] x15: fffffff6f976ba00 x14: 0000000000000041
[  759.284569] x13: ffffff9bede96590 x12: fffffff6f89f7b00
[  759.284576] x11: 2cf70e9f45774b00 x10: 0000000000000000
[  759.284584] x9 : 0000000000000000 x8 : 0000000000000000
[  759.284591] x7 : ffffff9bec02e394 x6 : 0000000000000000
[  759.284599] x5 : 0000000000000000 x4 : 0000000000000001
[  759.284606] x3 : 0000000000000000 x2 : ffffff9bebd5ca84
[  759.284614] x1 : 0000000000000001 x0 : fffffff883b08390
[  759.284622] Call trace:
[  759.284636]  exfat_lookup+0x1dc/0x1e0 [exfat]
[  759.284650]  __lookup_slow+0x9c/0x188
[  759.284658]  walk_component+0x1d0/0x868
[  759.284665]  path_lookupat+0xb8/0x210
[  759.284672]  filename_lookup+0x98/0x1c8
[  759.284679]  user_path_at_empty+0x54/0x68
[  759.284688]  vfs_statx+0x90/0x130
[  759.284695]  __arm64_sys_newfstatat+0x40/0x80
[  759.284704]  el0_svc_common+0xa0/0x170
[  759.284711]  el0_svc_handler+0x6c/0x88
[  759.284719]  el0_svc+0x8/0xc
[  759.284728] Code: 17ffffa7 92800176 17ffffec 940018f2 (d4210000)

Change-Id: I5fb26e2416f70733fe2010484740513dc9a8c5d0
Signed-off-by: a17671 <a17671@motorola.com>
Reviewed-on: https://gerrit.mot.com/1853335
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Xiangpo Zhao <zhaoxp3@motorola.com>
Submit-Approved: Jira Key
2021-01-19 19:32:36 -06:00
..
Android.mk exfat: fix build err on user build. 2020-11-06 04:43:04 -06:00
dkms.conf fs/exfat: import original library v1.2.9 2017-12-12 12:34:21 -06:00
exfat-km.mk fs/exfat: import original library v1.2.9 2017-12-12 12:34:21 -06:00
exfat_api.c fs/exfat: import original library v1.2.9 2017-12-12 12:34:21 -06:00
exfat_api.h fs/exfat: import original library v1.2.9 2017-12-12 12:34:21 -06:00
exfat_bitmap.c fs/exfat: import original library v1.2.9 2017-12-12 12:34:21 -06:00
exfat_bitmap.h fs/exfat: import original library v1.2.9 2017-12-12 12:34:21 -06:00
exfat_blkdev.c exfat: workround end_buffer_async_write undefine issue in GKI 5.4 2020-10-25 20:17:25 -05:00
exfat_blkdev.h fs/exfat: implement errors=remount-ro 2017-12-12 12:34:37 -06:00
exfat_cache.c fs/exfat: implement errors=remount-ro 2017-12-12 12:34:37 -06:00
exfat_cache.h fs/exfat: import original library v1.2.9 2017-12-12 12:34:21 -06:00
exfat_config.h fs/exfat: import original library v1.2.9 2017-12-12 12:34:21 -06:00
exfat_core.c exfat:fixed exfat compliling failed on kernel 5.4 2020-10-14 20:44:32 -05:00
exfat_core.h fs/exfat: import original library v1.2.9 2017-12-12 12:34:21 -06:00
exfat_data.c fs/exfat: import original library v1.2.9 2017-12-12 12:34:21 -06:00
exfat_data.h fs/exfat: import original library v1.2.9 2017-12-12 12:34:21 -06:00
exfat_nls.c fs/exfat: use correct length for utf conversion 2017-12-12 12:35:02 -06:00
exfat_nls.h fs/exfat: import original library v1.2.9 2017-12-12 12:34:21 -06:00
exfat_oal.c Exfat:fix compile fail on kernel-4.19 2020-01-07 00:43:11 -06:00
exfat_oal.h fs/exfat: import original library v1.2.9 2017-12-12 12:34:21 -06:00
exfat_super.c exfat:Fix panic of handlings of unhashed alias 2021-01-19 19:32:36 -06:00
exfat_super.h exfat:fixed exfat compliling failed on kernel 5.4 2020-10-14 20:44:32 -05:00
exfat_upcase.c fs/exfat: import original library v1.2.9 2017-12-12 12:34:21 -06:00
exfat_version.h fs/exfat: import original library v1.2.9 2017-12-12 12:34:21 -06:00
Kbuild exfat: fix build err on user build. 2020-11-06 04:43:04 -06:00
Kconfig fs/exfat: import original library v1.2.9 2017-12-12 12:34:21 -06:00
LICENSE fs/exfat: import original library v1.2.9 2017-12-12 12:34:21 -06:00
Makefile fs/exfat: build exfat lib as DLKM 2017-12-12 12:34:31 -06:00
README.md fs/exfat: import original library v1.2.9 2017-12-12 12:34:21 -06:00

exfat-nofuse

Linux non-fuse read/write kernel driver for the exFAT, FAT12, FAT16 and vfat (FAT32) file systems.
Originally ported from Android kernel v3.0.

Kudos to ksv1986 for the mutex patch!
Thanks to JackNorris for being awesome and providing the clear_inode() patch.

Big thanks to lqs for completing the driver!
Big thanks to benpicco for fixing 3.11.y compatibility!

Special thanks to github user AndreiLux for spreading the word about the leak!

Installing as a stand-alone module:

make
sudo make install

To load the driver manually, run this as root:

modprobe exfat

You may also specify custom toolchains by using CROSS_COMPILE flag, in my case:

CROSS_COMPILE=../dorimanx-SG2-I9100-Kernel/android-toolchain/bin/arm-eabi-

Installing as a part of the kernel:

Let's take [linux] as the path to your kernel source dir...

cd [linux]
cp -rvf exfat-nofuse [linux]/fs/exfat

edit [linux]/fs/Kconfig

 menu "DOS/FAT/NT Filesystems"

  source "fs/fat/Kconfig"
 +source "fs/exfat/Kconfig"
  source "fs/ntfs/Kconfig"
  endmenu

edit [linux]/fs/Makefile

  obj-$(CONFIG_FAT_FS)    += fat/
 +obj-$(CONFIG_EXFAT_FS)  += exfat/
  obj-$(CONFIG_BFS_FS)    += bfs/
cd [linux]
make menuconfig

Go to:

File systems > DOS/FAT/NT check exfat as MODULE (M) (437) Default codepage for exFAT (utf8) Default iocharset for exFAT

ESC to main menu Save an Alternate Configuration File ESC ESC

build your kernel

Have fun.

Installing as a DKMS module:

You can have even more fun with exfat-nofuse by installing it as a DKMS module has the main advantage of being auto-compiled (and thus, possibly surviving) between kernel upgrades.

First, get dkms. On Ubuntu this should be:

sudo apt install dkms

Then copy the root of this repository to /usr/share:

sudo cp -R . /usr/src/exfat-1.2.8 (or whatever version number declared on dkms.conf is)
sudo dkms add -m exfat -v 1.2.8

Build and load the module:

sudo dkms build -m exfat -v 1.2.8
sudo dkms install -m exfat -v 1.2.8

Now you have a proper dkms module that will work for a long time... hopefully.

Free Software for the Free Minds!