Sungjong Seo
1c33ca1e19
exfat: release s_lock before calling dir_emit()
...
commit ff84772fd45d486e4fc78c82e2f70ce5333543e6 upstream.
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
Tested-by: syzbot+1741a5d9b79989c10bdc@syzkaller.appspotmail.com
Signed-off-by: Sungjong Seo <sj1557.seo@samsung.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-08-11 15:13:56 +02:00
..
2022-08-17 14:24:07 +02:00
2023-02-01 08:27:06 +01:00
2023-06-21 15:59:18 +02:00
2021-10-20 21:09:02 -04:00
2023-08-03 10:22:44 +02:00
2022-07-02 16:41:14 +02:00
2023-08-11 15:13:56 +02:00
2023-08-03 10:22:30 +02:00
2023-03-10 09:39:50 +01:00
2022-12-31 13:14:15 +01:00
2022-11-10 18:15:37 +01:00
2022-12-31 13:14:03 +01:00
2022-02-01 17:27:01 +01:00
2023-08-03 10:22:28 +02:00
2022-07-02 16:41:14 +02:00
2023-07-23 13:47:48 +02:00
2023-08-11 15:13:56 +02:00
2022-06-09 10:23:32 +02:00
2023-05-24 17:36:44 +01:00
2023-07-27 08:46:57 +02:00
2023-07-23 13:47:46 +02:00
2022-06-09 10:22:42 +02:00
2021-10-04 22:13:12 +01:00
2023-07-27 08:46:54 +02:00
2023-06-09 10:32:21 +02:00
2023-03-10 09:39:57 +01:00
2023-05-24 17:36:43 +01:00
2022-12-31 13:14:44 +01:00
2022-06-09 10:22:55 +02:00
2021-11-12 15:05:50 +01:00
2023-08-03 10:22:25 +02:00
2023-07-23 13:47:34 +02:00
2023-07-27 08:46:58 +02:00
2023-07-23 13:47:23 +02:00
2023-08-03 10:22:30 +02:00
2023-03-30 12:47:56 +02:00
2022-04-13 20:59:10 +02:00
2021-12-29 12:28:59 +01:00
2023-07-23 13:47:16 +02:00
2021-10-04 22:02:17 +01:00
2023-08-03 10:22:44 +02:00
2023-06-28 10:29:45 +02:00
2023-07-23 13:47:36 +02:00
2022-11-26 09:24:52 +01:00
2023-07-23 13:47:46 +02:00
2023-06-21 15:59:14 +02:00
2022-12-31 13:14:44 +01:00
2023-07-23 13:47:36 +02:00
2023-02-09 11:26:44 +01:00
2023-07-23 13:46:48 +02:00
2023-07-27 08:46:57 +02:00
2023-07-23 13:47:33 +02:00
2023-05-11 23:00:17 +09:00
2021-12-14 10:57:12 +01:00
2023-02-22 12:57:07 +01:00
2022-12-31 13:14:05 +01:00
2022-09-20 12:39:43 +02:00
2023-05-17 11:50:14 +02:00
2023-07-27 08:46:58 +02:00
2023-04-05 11:24:51 +02:00
2023-06-14 11:13:09 +02:00
2023-04-05 11:25:01 +02:00
2023-02-22 12:57:05 +01:00
2023-03-17 08:49:01 +01:00
2023-01-12 11:58:46 +01:00
2022-11-03 23:59:12 +09:00
2022-06-09 10:22:26 +02:00
2022-12-31 13:14:39 +01:00
2022-11-26 09:24:51 +01:00
2022-12-31 13:14:30 +01:00
2022-04-08 14:24:18 +02:00
2022-09-28 11:11:56 +02:00
2023-01-24 07:22:43 +01:00
2023-06-21 15:59:14 +02:00
2022-11-03 23:59:12 +09:00
2022-10-26 12:34:58 +02:00
2023-08-03 10:22:44 +02:00
2023-07-23 13:47:34 +02:00
2023-05-17 11:50:16 +02:00
2023-07-23 13:47:33 +02:00
2023-08-03 10:22:30 +02:00
2022-05-25 09:57:26 +02:00
2021-10-18 20:22:03 -10:00
2022-12-31 13:14:03 +01:00
2023-03-17 08:49:02 +01:00
2022-12-14 11:37:31 +01:00
2023-01-12 11:59:20 +01:00
2023-07-23 13:47:36 +02:00
2023-04-13 16:48:25 +02:00
2023-03-17 08:49:01 +01:00
2022-06-06 08:43:37 +02:00
2023-01-12 11:58:47 +01:00
2022-07-02 16:41:17 +02:00
2022-07-02 16:41:14 +02:00
2022-12-19 12:36:39 +01:00
2022-07-21 21:24:14 +02:00
2022-01-29 10:58:25 +01:00
2022-07-12 16:35:08 +02:00
2021-12-14 10:57:15 +01:00
2022-10-26 12:34:17 +02:00
2022-04-27 14:38:57 +02:00
2023-05-24 17:36:54 +01:00
2023-03-30 12:47:56 +02:00
2022-04-27 14:38:50 +02:00
2022-10-26 12:34:36 +02:00
2022-12-31 13:14:01 +01:00