linux/fs/nilfs2
Ryusuke Konishi 8e1b9201c9 nilfs2: protect access to buffers with no active references
[ Upstream commit 367a9bffab ]

nilfs_lookup_dirty_data_buffers(), which iterates through the buffers
attached to dirty data folios/pages, accesses the attached buffers without
locking the folios/pages.

For data cache, nilfs_clear_folio_dirty() may be called asynchronously
when the file system degenerates to read only, so
nilfs_lookup_dirty_data_buffers() still has the potential to cause use
after free issues when buffers lose the protection of their dirty state
midway due to this asynchronous clearing and are unintentionally freed by
try_to_free_buffers().

Eliminate this race issue by adjusting the lock section in this function.

Link: https://lkml.kernel.org/r/20250107200202.6432-3-konishi.ryusuke@gmail.com
Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Fixes: 8c26c4e269 ("nilfs2: fix issue with flush kernel thread after remount in RO mode because of driver's internal error or metadata corruption")
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2025-02-08 09:52:27 +01:00
..
alloc.c nilfs2: fix incorrect inode allocation from reserved inodes 2024-07-11 12:49:22 +02:00
alloc.h nilfs2: fix incorrect inode allocation from reserved inodes 2024-07-11 12:49:22 +02:00
bmap.c nilfs2: fix infinite loop in nilfs_mdt_get_block() 2023-05-06 10:10:07 -07:00
bmap.h nilfs2: remove filenames from file comments 2021-11-09 10:02:52 -08:00
btnode.c nilfs2: fix buffer head leaks in calls to truncate_inode_pages() 2024-12-27 13:58:56 +01:00
btnode.h fs/nilfs2: Use the enum req_op and blk_opf_t types 2022-07-14 12:14:33 -06:00
btree.c nilfs2: fix potential oob read in nilfs_btree_check_delete() 2024-10-04 16:29:22 +02:00
btree.h nilfs2: remove filenames from file comments 2021-11-09 10:02:52 -08:00
cpfile.c nilfs2: remove filenames from file comments 2021-11-09 10:02:52 -08:00
cpfile.h nilfs2: remove filenames from file comments 2021-11-09 10:02:52 -08:00
dat.c nilfs2: fix incorrect inode allocation from reserved inodes 2024-07-11 12:49:22 +02:00
dat.h nilfs2: remove filenames from file comments 2021-11-09 10:02:52 -08:00
dir.c nilfs2: fix potential out-of-bounds memory access in nilfs_find_entry() 2024-12-14 19:59:54 +01:00
direct.c nilfs2: fix failure to detect DAT corruption in btree and direct mappings 2024-04-03 15:28:34 +02:00
direct.h nilfs2: remove filenames from file comments 2021-11-09 10:02:52 -08:00
export.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
file.c nilfs2: fix hang in nilfs_lookup_dirty_data_buffers() 2024-02-23 09:25:11 +01:00
gcinode.c nilfs2: fix buffer head leaks in calls to truncate_inode_pages() 2024-12-27 13:58:56 +01:00
ifile.c nilfs2: fix incorrect inode allocation from reserved inodes 2024-07-11 12:49:22 +02:00
ifile.h nilfs2: remove filenames from file comments 2021-11-09 10:02:52 -08:00
inode.c nilfs2: prevent use of deleted inode 2024-12-27 13:58:56 +01:00
ioctl.c nilfs2: fix out-of-range warning 2024-06-12 11:11:31 +02:00
Kconfig fs: add CONFIG_BUFFER_HEAD 2023-08-02 09:13:09 -06:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
mdt.c nilfs2: fix null-ptr-deref in block_dirty_buffer tracepoint 2024-11-22 15:38:34 +01:00
mdt.h nilfs2: fix lockdep warnings during disk space reclamation 2022-04-01 11:46:09 -07:00
namei.c nilfs2: prevent use of deleted inode 2024-12-27 13:58:56 +01:00
nilfs.h nilfs2: fix buffer head leaks in calls to truncate_inode_pages() 2024-12-27 13:58:56 +01:00
page.c nilfs2: fix null-ptr-deref in block_dirty_buffer tracepoint 2024-11-22 15:38:34 +01:00
page.h nilfs2: get rid of nilfs_mapping_init() 2022-04-01 11:46:09 -07:00
recovery.c nilfs2: fix missing cleanup on rollforward recovery error 2024-09-12 11:11:28 +02:00
segbuf.c nilfs2: fix buffer corruption due to concurrent device reads 2023-06-19 13:19:33 -07:00
segbuf.h nilfs2: remove filenames from file comments 2021-11-09 10:02:52 -08:00
segment.c nilfs2: protect access to buffers with no active references 2025-02-08 09:52:27 +01:00
segment.h nilfs2: remove filenames from file comments 2021-11-09 10:02:52 -08:00
sufile.c nilfs2: prevent WARNING in nilfs_sufile_set_segment_usage() 2023-12-13 18:45:22 +01:00
sufile.h nilfs2: remove filenames from file comments 2021-11-09 10:02:52 -08:00
super.c nilfs2: use setup_bdev_super to de-duplicate the mount code 2023-08-10 10:34:56 +02:00
sysfs.c nilfs2: protect references to superblock parameters exposed in sysfs 2024-09-12 11:11:28 +02:00
sysfs.h nilfs2: remove filenames from file comments 2021-11-09 10:02:52 -08:00
the_nilfs.c nilfs2: fix inode number range checks 2024-07-11 12:49:15 +02:00
the_nilfs.h nilfs2: fix inode number range checks 2024-07-11 12:49:15 +02:00