ext4: add i_data_sem protection in ext4_destroy_inline_data_nolock()
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 3.17, 3.19, 4.5, 4.10, 4.11, and 7 more
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
- Exploitation: none
- Automatable: no
- Technical impact: partial
Summary
In the Linux kernel, the following vulnerability has been resolved: ext4: add i_data_sem protection in ext4_destroy_inline_data_nolock() Fix a race between inline data destruction and block mapping. The function ext4_destroy_inline_data_nolock() changes the inode data layout by clearing EXT4_INODE_INLINE_DATA and setting EXT4_INODE_EXTENTS. At the same time, another thread may execute ext4_map_blocks(), which tests EXT4_INODE_EXTENTS to decide whether to call ext4_ext_map_blocks() or ext4_ind_map_blocks(). Without i_data_sem protection, ext4_ind_map_blocks() may receive inode with EXT4_INODE_EXTENTS flag and triggering assert. kernel BUG at fs/ext4/indirect.c:546! EXT4-fs (loop2): unmounting filesystem. invalid opcode: 0000 [#1] PREEMPT SMP KASAN NOPTI Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014 RIP: 0010:ext4_ind_map_blocks.cold+0x2b/0x5a fs/ext4/indirect.c:546 Call Trace: <TASK> ext4_map_blocks+0xb9b/0x16f0 fs/ext4/inode.c:681 _ext4_get_block+0x242/0x590 fs/ext4/inode.c:822 ext4_block_write_begin+0x48b/0x12c0 fs/ext4/inode.c:1124 ext4_write_begin+0x598/0xef0 fs/ext4/inode.c:1255 ext4_da_write_begin+0x21e/0x9c0 fs/ext4/inode.c:3000 generic_perform_write+0x259/0x5d0 mm/filemap.c:3846 ext4_buffered_write_iter+0x15b/0x470 fs/ext4/file.c:285 ext4_file_write_iter+0x8e0/0x17f0 fs/ext4/file.c:679 call_write_iter include/linux/fs.h:2271 [inline] do_iter_readv_writev+0x212/0x3c0 fs/read_write.c:735 do_iter_write+0x186/0x710 fs/read_write.c:861 vfs_iter_write+0x70/0xa0 fs/read_write.c:902 iter_file_splice_write+0x73b/0xc90 fs/splice.c:685 do_splice_from fs/splice.c:763 [inline] direct_splice_actor+0x10f/0x170 fs/splice.c:950 splice_direct_to_actor+0x33a/0xa10 fs/splice.c:896 do_splice_direct+0x1a9/0x280 fs/splice.c:1002 do_sendfile+0xb13/0x12c0 fs/read_write.c:1255 __do_sys_sendfile64 fs/read_write.c:1323 [inline] __se_sys_sendfile64 fs/read_write.c:1309 [inline] __x64_sys_sendfile64+0x1cf/0x210 fs/read_write.c:1309 do_syscall_x64 arch/x86/entry/common.c:51 [inline] do_syscall_64+0x35/0x80 arch/x86/entry/common.c:81 entry_SYSCALL_64_after_hwframe+0x6e/0xd8
Timeline
- CVE published
- CISA SSVC assessment
Exploitation: none · Automatable: no · Technical impact: partial
- Record last updated
Affected versions
- Linux Linux
From c755e251357a0cee0679081f08c3f4ba797a8009 · fixed in b322bac9f01d03190b5abc52be5d9dd9f22a2b41; From c755e251357a0cee0679081f08c3f4ba797a8009 · fixed in 61e03dc3794ebf77a706b85e5a36c9c6d70be6de; From c755e251357a0cee0679081f08c3f4ba797a8009 · fixed in 5b266cf6851ce72b11b067fe02adf5a8687104ad; From c755e251357a0cee0679081f08c3f4ba797a8009 · fixed in 144c48da33a01d92995aeccd8208eb47d2a8e659; From c755e251357a0cee0679081f08c3f4ba797a8009 · fixed in 22a76b0861ae61a299c8e126c1aca8c4fda820fd; From c755e251357a0cee0679081f08c3f4ba797a8009 · fixed in ba8aeff294ac7ff6dfe293663d815c54c5ee218c; From c755e251357a0cee0679081f08c3f4ba797a8009 · fixed in 5cad18e527ba8a9ca5463cc170073eeb5a4826f4; From c755e251357a0cee0679081f08c3f4ba797a8009 · fixed in 0cd8feea8777f8d9b9a862b89c688b049a5c8475; From 3.16.44 · fixed in 3.17; From 3.18.107 · fixed in 3.19; From 4.4.129 · fixed in 4.5; From 4.9.14 · fixed in 4.10; From 4.10.2 · fixed in 4.11
- Linux Linux
4.11
- KernelLinux
From 4.11.0 · fixed in 5.10.248; From 5.11.0 · fixed in 5.15.198; From 5.16.0 · fixed in 6.1.160; From 6.2.0 · fixed in 6.6.120; From 6.7.0 · fixed in 6.12.62; From 6.13.0 · fixed in 6.17.12; From 6.18.0 · fixed in 6.18.1
References 8
git.kernel.org
- stable/c/b322bac9f01d03190b5abc52be5d9dd9f22a2b41
- stable/c/61e03dc3794ebf77a706b85e5a36c9c6d70be6de
- stable/c/5b266cf6851ce72b11b067fe02adf5a8687104ad
- stable/c/144c48da33a01d92995aeccd8208eb47d2a8e659
- stable/c/22a76b0861ae61a299c8e126c1aca8c4fda820fd
- stable/c/ba8aeff294ac7ff6dfe293663d815c54c5ee218c
- stable/c/5cad18e527ba8a9ca5463cc170073eeb5a4826f4
- stable/c/0cd8feea8777f8d9b9a862b89c688b049a5c8475