Commit 5701875
ext4: fix out-of-bound read in ext4_xattr_inode_dec_ref_all()
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 <[email protected]>
Reviewed-by: Jan Kara <[email protected]>
Link: https://patch.msgid.link/[email protected]
Signed-off-by: Theodore Ts'o <[email protected]>1 parent 69f3a30 commit 5701875
3 files changed
+13
-25
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4696 | 4696 | | |
4697 | 4697 | | |
4698 | 4698 | | |
| 4699 | + | |
| 4700 | + | |
| 4701 | + | |
| 4702 | + | |
| 4703 | + | |
4699 | 4704 | | |
4700 | 4705 | | |
4701 | 4706 | | |
| |||
| 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 | | |
| |||
783 | 777 | | |
784 | 778 | | |
785 | 779 | | |
786 | | - | |
787 | 780 | | |
788 | 781 | | |
789 | 782 | | |
| |||
793 | 786 | | |
794 | 787 | | |
795 | 788 | | |
796 | | - | |
797 | | - | |
798 | | - | |
799 | | - | |
800 | 789 | | |
801 | 790 | | |
802 | 791 | | |
803 | | - | |
804 | 792 | | |
805 | 793 | | |
806 | 794 | | |
| |||
868 | 856 | | |
869 | 857 | | |
870 | 858 | | |
871 | | - | |
872 | 859 | | |
873 | 860 | | |
874 | 861 | | |
| |||
879 | 866 | | |
880 | 867 | | |
881 | 868 | | |
882 | | - | |
883 | | - | |
884 | | - | |
885 | | - | |
886 | 869 | | |
887 | 870 | | |
888 | 871 | | |
| |||
2246 | 2229 | | |
2247 | 2230 | | |
2248 | 2231 | | |
2249 | | - | |
2250 | | - | |
2251 | | - | |
2252 | 2232 | | |
2253 | 2233 | | |
2254 | 2234 | | |
| |||
2799 | 2779 | | |
2800 | 2780 | | |
2801 | 2781 | | |
2802 | | - | |
2803 | | - | |
2804 | | - | |
2805 | | - | |
2806 | 2782 | | |
2807 | 2783 | | |
2808 | 2784 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
209 | 209 | | |
210 | 210 | | |
211 | 211 | | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
212 | 219 | | |
213 | 220 | | |
214 | 221 | | |
| |||
0 commit comments