linux-yocto/fs/ext4
Brian Foster cf6a4c4ac7 ext4: only dirty folios when data journaling regular files
commit e26268ff1d upstream.

fstest generic/388 occasionally reproduces a crash that looks as
follows:

BUG: kernel NULL pointer dereference, address: 0000000000000000
...
Call Trace:
 <TASK>
 ext4_block_zero_page_range+0x30c/0x380 [ext4]
 ext4_truncate+0x436/0x440 [ext4]
 ext4_process_orphan+0x5d/0x110 [ext4]
 ext4_orphan_cleanup+0x124/0x4f0 [ext4]
 ext4_fill_super+0x262d/0x3110 [ext4]
 get_tree_bdev_flags+0x132/0x1d0
 vfs_get_tree+0x26/0xd0
 vfs_cmd_create+0x59/0xe0
 __do_sys_fsconfig+0x4ed/0x6b0
 do_syscall_64+0x82/0x170
 ...

This occurs when processing a symlink inode from the orphan list. The
partial block zeroing code in the truncate path calls
ext4_dirty_journalled_data() -> folio_mark_dirty(). The latter calls
mapping->a_ops->dirty_folio(), but symlink inodes are not assigned an
a_ops vector in ext4, hence the crash.

To avoid this problem, update the ext4_dirty_journalled_data() helper to
only mark the folio dirty on regular files (for which a_ops is
assigned). This also matches the journaling logic in the ext4_symlink()
creation path, where ext4_handle_dirty_metadata() is called directly.

Fixes: d84c9ebdac ("ext4: Mark pages with journalled data dirty")
Signed-off-by: Brian Foster <bfoster@redhat.com>
Link: https://patch.msgid.link/20250516173800.175577-1-bfoster@redhat.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Reviewed-by: Jan Kara <jack@suse.cz>
Cc: stable@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2025-06-27 11:08:47 +01:00
..
.kunitconfig
acl.c
acl.h ext4: apply umask if ACL support is disabled 2023-11-28 17:20:15 +00:00
balloc.c ext4: reorder capability check last 2025-06-04 14:41:57 +02:00
bitmap.c
block_validity.c ext4: make block validity check resistent to sb bh corruption 2025-05-02 07:51:00 +02:00
crypto.c
dir.c ext4: fix OOB read when checking dotdot dir 2025-04-10 14:37:43 +02:00
ext4_extents.h
ext4_jbd2.c
ext4_jbd2.h
ext4.h ext4: factor out ext4_get_maxbytes() 2025-06-27 11:08:47 +01:00
extents_status.c ext4: fix infinite loop when replaying fast_commit 2024-08-03 08:53:53 +02:00
extents_status.h
extents.c ext4: factor out ext4_get_maxbytes() 2025-06-27 11:08:47 +01:00
fast_commit.c ext4: use handle to mark fc as ineligible in __track_dentry_update() 2024-10-10 11:57:49 +02:00
fast_commit.h
file.c ext4: factor out ext4_get_maxbytes() 2025-06-27 11:08:47 +01:00
fsmap.c ext4: fix FS_IOC_GETFSMAP handling 2024-12-09 10:32:42 +01:00
fsmap.h
fsync.c
hash.c
ialloc.c ext4: convert to new timestamp accessors 2025-01-09 13:31:40 +01:00
indirect.c ext4: fix race in buffer_head read fault injection 2024-12-09 10:31:46 +01:00
inline.c ext4: inline: fix len overflow in ext4_prepare_inline_data 2025-06-27 11:08:47 +01:00
inode-test.c
inode.c ext4: only dirty folios when data journaling regular files 2025-06-27 11:08:47 +01:00
ioctl.c ext4: convert to new timestamp accessors 2025-01-09 13:31:40 +01:00
Kconfig
Makefile
mballoc.c ext4: fix FS_IOC_GETFSMAP handling 2024-12-09 10:32:42 +01:00
mballoc.h ext4: fix FS_IOC_GETFSMAP handling 2024-12-09 10:32:42 +01:00
migrate.c ext4: fix i_data_sem unlock order in ext4_ind_migrate() 2024-10-10 11:57:39 +02:00
mmp.c ext4: fix race in buffer_head read fault injection 2024-12-09 10:31:46 +01:00
move_extent.c ext4: fix race in buffer_head read fault injection 2024-12-09 10:31:46 +01:00
namei.c ext4: fix off-by-one error in do_split 2025-04-25 10:45:27 +02:00
orphan.c
page-io.c ext4: do not convert the unwritten extents if data writeback fails 2025-06-04 14:41:59 +02:00
readpage.c ext4: remove calls to to set/clear the folio error flag 2024-12-09 10:31:45 +01:00
resize.c ext4: fix race in buffer_head read fault injection 2024-12-09 10:31:46 +01:00
super.c ext4: reject the 'data_err=abort' option in nojournal mode 2025-06-04 14:41:59 +02:00
symlink.c
sysfs.c ext4: avoid ptr null pointer dereference 2024-07-18 13:21:25 +02:00
truncate.h
verity.c
xattr_hurd.c
xattr_security.c
xattr_trusted.c
xattr_user.c
xattr.c ext4: ignore xattrs past end 2025-04-25 10:45:16 +02:00
xattr.h