Commit 45db5af
ext4: fix out-of-bound read in ext4_xattr_inode_dec_ref_all()
jira VULN-65381
cve CVE-2025-22121
commit-author Ye Bin <yebin10@huawei.com>
commit 5701875
There's issue as follows:
BUG: KASAN: use-after-free in ext4_xattr_inode_dec_ref_all+0x6ff/0x790
Read of size 4 at addr ffff88807b003000 by task syz-executor.0/15172
CPU: 3 PID: 15172 Comm: syz-executor.0
Call Trace:
__dump_stack lib/dump_stack.c:82 [inline]
dump_stack+0xbe/0xfd lib/dump_stack.c:123
print_address_description.constprop.0+0x1e/0x280 mm/kasan/report.c:400
__kasan_report.cold+0x6c/0x84 mm/kasan/report.c:560
kasan_report+0x3a/0x50 mm/kasan/report.c:585
ext4_xattr_inode_dec_ref_all+0x6ff/0x790 fs/ext4/xattr.c:1137
ext4_xattr_delete_inode+0x4c7/0xda0 fs/ext4/xattr.c:2896
ext4_evict_inode+0xb3b/0x1670 fs/ext4/inode.c:323
evict+0x39f/0x880 fs/inode.c:622
iput_final fs/inode.c:1746 [inline]
iput fs/inode.c:1772 [inline]
iput+0x525/0x6c0 fs/inode.c:1758
ext4_orphan_cleanup fs/ext4/super.c:3298 [inline]
ext4_fill_super+0x8c57/0xba40 fs/ext4/super.c:5300
mount_bdev+0x355/0x410 fs/super.c:1446
legacy_get_tree+0xfe/0x220 fs/fs_context.c:611
vfs_get_tree+0x8d/0x2f0 fs/super.c:1576
do_new_mount fs/namespace.c:2983 [inline]
path_mount+0x119a/0x1ad0 fs/namespace.c:3316
do_mount+0xfc/0x110 fs/namespace.c:3329
__do_sys_mount fs/namespace.c:3540 [inline]
__se_sys_mount+0x219/0x2e0 fs/namespace.c:3514
do_syscall_64+0x33/0x40 arch/x86/entry/common.c:46
entry_SYSCALL_64_after_hwframe+0x67/0xd1
Memory state around the buggy address:
ffff88807b002f00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ffff88807b002f80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>ffff88807b003000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
^
ffff88807b003080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ffff88807b003100: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Above issue happens as ext4_xattr_delete_inode() isn't check xattr
is valid if xattr is in inode.
To solve above issue call xattr_check_inode() check if xattr if valid
in inode. In fact, we can directly verify in ext4_iget_extra_inode(),
so that there is no divergent verification.
Fixes: e50e512 ("ext4: xattr-in-inode support")
Signed-off-by: Ye Bin <yebin10@huawei.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Link: https://patch.msgid.link/20250208063141.1539283-3-yebin@huaweicloud.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
(cherry picked from commit 5701875)
Signed-off-by: Marcin Wcisło <marcin.wcislo@conclusive.pl>1 parent 2d68915 commit 45db5af
3 files changed
+13
-25
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4788 | 4788 | | |
4789 | 4789 | | |
4790 | 4790 | | |
| 4791 | + | |
| 4792 | + | |
| 4793 | + | |
| 4794 | + | |
| 4795 | + | |
4791 | 4796 | | |
4792 | 4797 | | |
4793 | 4798 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
308 | 308 | | |
309 | 309 | | |
310 | 310 | | |
311 | | - | |
| 311 | + | |
312 | 312 | | |
313 | 313 | | |
314 | 314 | | |
315 | 315 | | |
316 | 316 | | |
317 | 317 | | |
318 | 318 | | |
319 | | - | |
320 | | - | |
321 | | - | |
322 | 319 | | |
323 | 320 | | |
324 | 321 | | |
| |||
650 | 647 | | |
651 | 648 | | |
652 | 649 | | |
653 | | - | |
654 | | - | |
655 | | - | |
656 | 650 | | |
657 | 651 | | |
658 | 652 | | |
| |||
784 | 778 | | |
785 | 779 | | |
786 | 780 | | |
787 | | - | |
788 | 781 | | |
789 | 782 | | |
790 | 783 | | |
| |||
794 | 787 | | |
795 | 788 | | |
796 | 789 | | |
797 | | - | |
798 | | - | |
799 | | - | |
800 | | - | |
801 | 790 | | |
802 | 791 | | |
803 | 792 | | |
804 | | - | |
805 | 793 | | |
806 | 794 | | |
807 | 795 | | |
| |||
869 | 857 | | |
870 | 858 | | |
871 | 859 | | |
872 | | - | |
873 | 860 | | |
874 | 861 | | |
875 | 862 | | |
| |||
880 | 867 | | |
881 | 868 | | |
882 | 869 | | |
883 | | - | |
884 | | - | |
885 | | - | |
886 | | - | |
887 | 870 | | |
888 | 871 | | |
889 | 872 | | |
| |||
2222 | 2205 | | |
2223 | 2206 | | |
2224 | 2207 | | |
2225 | | - | |
2226 | | - | |
2227 | | - | |
2228 | 2208 | | |
2229 | 2209 | | |
2230 | 2210 | | |
| |||
2774 | 2754 | | |
2775 | 2755 | | |
2776 | 2756 | | |
2777 | | - | |
2778 | | - | |
2779 | | - | |
2780 | | - | |
2781 | 2757 | | |
2782 | 2758 | | |
2783 | 2759 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
210 | 210 | | |
211 | 211 | | |
212 | 212 | | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
213 | 220 | | |
214 | 221 | | |
215 | 222 | | |
| |||
0 commit comments