Commit 9338ffc
committed
ext4: fix out-of-bound read in ext4_xattr_inode_dec_ref_all()
jira VULN-65380
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: Brett Mastbergen <bmastbergen@ciq.com>1 parent f39945c commit 9338ffc
3 files changed
+13
-25
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4685 | 4685 | | |
4686 | 4686 | | |
4687 | 4687 | | |
| 4688 | + | |
| 4689 | + | |
| 4690 | + | |
| 4691 | + | |
| 4692 | + | |
4688 | 4693 | | |
4689 | 4694 | | |
4690 | 4695 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
302 | 302 | | |
303 | 303 | | |
304 | 304 | | |
305 | | - | |
| 305 | + | |
306 | 306 | | |
307 | 307 | | |
308 | 308 | | |
309 | 309 | | |
310 | 310 | | |
311 | 311 | | |
312 | 312 | | |
313 | | - | |
314 | | - | |
315 | | - | |
316 | 313 | | |
317 | 314 | | |
318 | 315 | | |
| |||
639 | 636 | | |
640 | 637 | | |
641 | 638 | | |
642 | | - | |
643 | | - | |
644 | | - | |
645 | 639 | | |
646 | 640 | | |
647 | 641 | | |
| |||
773 | 767 | | |
774 | 768 | | |
775 | 769 | | |
776 | | - | |
777 | 770 | | |
778 | 771 | | |
779 | 772 | | |
| |||
783 | 776 | | |
784 | 777 | | |
785 | 778 | | |
786 | | - | |
787 | | - | |
788 | | - | |
789 | | - | |
790 | 779 | | |
791 | 780 | | |
792 | 781 | | |
793 | | - | |
794 | 782 | | |
795 | 783 | | |
796 | 784 | | |
| |||
858 | 846 | | |
859 | 847 | | |
860 | 848 | | |
861 | | - | |
862 | 849 | | |
863 | 850 | | |
864 | 851 | | |
| |||
869 | 856 | | |
870 | 857 | | |
871 | 858 | | |
872 | | - | |
873 | | - | |
874 | | - | |
875 | | - | |
876 | 859 | | |
877 | 860 | | |
878 | 861 | | |
| |||
2233 | 2216 | | |
2234 | 2217 | | |
2235 | 2218 | | |
2236 | | - | |
2237 | | - | |
2238 | | - | |
2239 | 2219 | | |
2240 | 2220 | | |
2241 | 2221 | | |
| |||
2752 | 2732 | | |
2753 | 2733 | | |
2754 | 2734 | | |
2755 | | - | |
2756 | | - | |
2757 | | - | |
2758 | | - | |
2759 | 2735 | | |
2760 | 2736 | | |
2761 | 2737 | | |
| |||
| 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