Sungjong Seo
ddf7cc7029
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 11:57:52 +02:00
..
2022-06-22 14:13:12 +02:00
2020-10-24 12:26:05 -07:00
2023-02-01 08:23:11 +01:00
2023-06-21 15:45:40 +02:00
2020-10-16 11:11:22 -07:00
2021-01-06 14:56:52 +01:00
2023-08-11 11:57:43 +02:00
2021-03-30 14:32:07 +02:00
2023-08-11 11:57:52 +02:00
2023-05-17 11:48:14 +02:00
2023-03-11 16:39:51 +01:00
2023-01-14 10:15:37 +01:00
2022-11-10 18:14:25 +01:00
2023-01-14 10:15:19 +01:00
2022-02-01 17:25:39 +01:00
2023-08-11 11:57:32 +02:00
2021-05-26 12:06:55 +02:00
2020-11-25 16:55:02 +01:00
2023-07-27 08:44:26 +02:00
2023-08-11 11:57:52 +02:00
2023-05-30 12:57:48 +01:00
2023-08-11 11:57:33 +02:00
2023-07-27 08:44:25 +02:00
2022-06-09 10:20:58 +02:00
2021-09-18 13:40:15 +02:00
2023-07-27 08:44:34 +02:00
2023-06-09 10:30:08 +02:00
2023-03-11 16:39:55 +01:00
2023-05-30 12:57:47 +01:00
2021-04-14 08:42:06 +02:00
2023-01-14 10:16:20 +01:00
2022-07-07 17:52:19 +02:00
2021-11-12 14:58:33 +01:00
2023-05-17 11:47:52 +02:00
2023-07-27 08:44:13 +02:00
2023-07-27 08:44:27 +02:00
2023-07-27 08:44:05 +02:00
2021-09-18 13:40:30 +02:00
2022-04-13 21:01:01 +02:00
2023-07-27 08:44:00 +02:00
2020-12-30 11:53:45 +01:00
2023-08-11 11:57:42 +02:00
2023-06-28 10:28:09 +02:00
2023-07-27 08:44:15 +02:00
2022-11-25 17:45:57 +01:00
2023-06-21 15:45:37 +02:00
2023-01-14 10:16:20 +01:00
2023-07-27 08:43:55 +02:00
2023-06-28 10:28:09 +02:00
2023-07-27 08:43:36 +02:00
2021-09-30 10:11:08 +02:00
2023-01-14 10:16:38 +01:00
2023-07-27 08:44:13 +02:00
2023-05-17 11:47:34 +02:00
2020-10-24 12:26:05 -07:00
2023-02-22 12:55:56 +01:00
2023-01-14 10:15:22 +01:00
2022-09-20 12:38:31 +02:00
2023-05-17 11:47:35 +02:00
2023-03-17 08:45:07 +01:00
2020-10-24 12:26:05 -07:00
2021-10-17 10:43:33 +02:00
2023-04-05 11:23:44 +02:00
2023-06-14 11:09:59 +02:00
2023-04-05 11:23:51 +02:00
2023-02-22 12:55:54 +01:00
2023-03-22 13:30:08 +01:00
2023-01-14 10:16:26 +01:00
2022-11-03 23:57:49 +09:00
2022-06-09 10:20:47 +02:00
2023-01-14 10:16:13 +01:00
2021-06-03 09:00:45 +02:00
2022-11-25 17:45:56 +01:00
2023-01-14 10:15:59 +01:00
2023-01-04 11:39:22 +01:00
2020-10-14 14:54:45 -07:00
2022-06-09 10:21:16 +02:00
2021-04-14 08:41:58 +02:00
2023-01-04 11:39:24 +01:00
2023-06-21 15:45:37 +02:00
2022-11-03 23:57:49 +09:00
2022-10-30 09:41:18 +01:00
2022-05-18 10:23:48 +02:00
2023-08-11 11:57:42 +02:00
2023-07-27 08:44:13 +02:00
2020-10-13 18:38:27 -07:00
2023-05-17 11:48:10 +02:00
2023-07-27 08:44:13 +02:00
2023-07-27 08:44:13 +02:00
2022-05-25 09:17:54 +02:00
2021-02-17 11:02:21 +01:00
2021-10-27 09:56:51 +02:00
2023-01-14 10:15:19 +01:00
2023-01-14 10:16:47 +01:00
2023-01-04 11:39:23 +01:00
2023-01-14 10:16:50 +01:00
2023-07-27 08:44:14 +02:00
2021-08-26 08:35:57 -04:00
2023-03-22 13:30:08 +01:00
2022-06-06 08:42:41 +02:00
2023-01-14 10:16:27 +01:00
2021-03-17 17:06:13 +01:00
2020-12-30 11:54:02 +01:00
2022-12-19 12:27:30 +01:00
2021-04-21 13:00:54 +02:00
2022-07-21 21:20:01 +02:00
2022-01-29 10:26:11 +01:00
2021-07-20 16:05:59 +02:00
2022-09-05 10:28:58 +02:00
2022-10-17 17:26:07 +02:00
2022-04-27 13:53:54 +02:00
2023-05-30 12:57:55 +01:00
2022-11-10 18:14:25 +01:00
2022-08-31 17:15:14 +02:00
2022-10-26 13:25:17 +02:00
2023-01-14 10:15:16 +01:00