CVE-2021-47508

In the Linux kernel, the following vulnerability has been resolved: btrfs: free exchange changeset on failures Fstests runs on my VMs have show several kmemleak reports like the following. unreferenced object 0xffff88811ae59080 (size 64): comm "xfs_io", pid 12124, jiffies 4294987392 (age 6.368s) hex dump (first 32 bytes): 00 c0 1c 00 00 00 00 00 ff cf 1c 00 00 00 00 00 ................ 90 97 e5 1a 81 88 ff ff 90 97 e5 1a 81 88 ff ff ................ backtrace: [<00000000ac0176d2>] ulist_add_merge+0x60/0x150 [btrfs] [<0000000076e9f312>] set_state_bits+0x86/0xc0 [btrfs] [<0000000014fe73d6>] set_extent_bit+0x270/0x690 [btrfs] [<000000004f675208>] set_record_extent_bits+0x19/0x20 [btrfs] [<00000000b96137b1>] qgroup_reserve_data+0x274/0x310 [btrfs] [<0000000057e9dcbb>] btrfs_check_data_free_space+0x5c/0xa0 [btrfs] [<0000000019c4511d>] btrfs_delalloc_reserve_space+0x1b/0xa0 [btrfs] [<000000006d37e007>] btrfs_dio_iomap_begin+0x415/0x970 [btrfs] [<00000000fb8a74b8>] iomap_iter+0x161/0x1e0 [<0000000071dff6ff>] __iomap_dio_rw+0x1df/0x700 [<000000002567ba53>] iomap_dio_rw+0x5/0x20 [<0000000072e555f8>] btrfs_file_write_iter+0x290/0x530 [btrfs] [<000000005eb3d845>] new_sync_write+0x106/0x180 [<000000003fb505bf>] vfs_write+0x24d/0x2f0 [<000000009bb57d37>] __x64_sys_pwrite64+0x69/0xa0 [<000000003eba3fdf>] do_syscall_64+0x43/0x90 In case brtfs_qgroup_reserve_data() or btrfs_delalloc_reserve_metadata() fail the allocated extent_changeset will not be freed. So in btrfs_check_data_free_space() and btrfs_delalloc_reserve_space() free the allocated extent_changeset to get rid of the allocated memory. The issue currently only happens in the direct IO write path, but only after 65b3c08606e5 ("btrfs: fix ENOSPC failure when attempting direct IO write into NOCOW range"), and also at defrag_one_locked_target(). Every other place is always calling extent_changeset_free() even if its call to btrfs_delalloc_reserve_space() or btrfs_check_data_free_space() has failed.
Configurations

Configuration 1 (hide)

OR cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:5.16:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:5.16:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:5.16:rc3:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:5.16:rc4:*:*:*:*:*:*

History

24 Sep 2025, 19:20

Type Values Removed Values Added
CPE cpe:2.3:o:linux:linux_kernel:5.16:rc4:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:5.16:rc3:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:5.16:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:5.16:rc1:*:*:*:*:*:*
CVSS v2 : unknown
v3 : unknown
v2 : unknown
v3 : 5.5
First Time Linux linux Kernel
Linux
References () https://git.kernel.org/stable/c/ca06c5cb1b6dbfe67655b33c02fc394d65824519 - () https://git.kernel.org/stable/c/ca06c5cb1b6dbfe67655b33c02fc394d65824519 - Patch
References () https://git.kernel.org/stable/c/da5e817d9d75422eaaa05490d0b9a5e328fc1a51 - () https://git.kernel.org/stable/c/da5e817d9d75422eaaa05490d0b9a5e328fc1a51 - Patch
CWE CWE-401

21 Nov 2024, 06:36

Type Values Removed Values Added
References () https://git.kernel.org/stable/c/ca06c5cb1b6dbfe67655b33c02fc394d65824519 - () https://git.kernel.org/stable/c/ca06c5cb1b6dbfe67655b33c02fc394d65824519 -
References () https://git.kernel.org/stable/c/da5e817d9d75422eaaa05490d0b9a5e328fc1a51 - () https://git.kernel.org/stable/c/da5e817d9d75422eaaa05490d0b9a5e328fc1a51 -
Summary
  • (es) En el kernel de Linux, se resolvió la siguiente vulnerabilidad: btrfs: conjunto de cambios de intercambio gratuito en caso de fallas. Las ejecuciones de Fstests en mis VM han mostrado varios informes de kmemleak como el siguiente. objeto sin referencia 0xffff88811ae59080 (tamaño 64): comm "xfs_io", pid 12124, jiffies 4294987392 (edad 6,368 s) volcado hexadecimal (primeros 32 bytes): 00 c0 1c 00 00 00 00 00 ff cf 1c 00 00 00 00... ............. 90 97 e5 1a 81 88 ff ff 90 97 e5 1a 81 88 ff ff ................ retroceso: [&lt;00000000ac0176d2 &gt;] ulist_add_merge+0x60/0x150 [btrfs] [&lt;0000000076e9f312&gt;] set_state_bits+0x86/0xc0 [btrfs] [&lt;0000000014fe73d6&gt;] set_extent_bit+0x270/0x690 [btrfs] [&lt;000000004f 675208&gt;] set_record_extent_bits+0x19/0x20 [btrfs] [ &lt;00000000b96137b1&gt;] qgroup_reserve_data+0x274/0x310 [btrfs] [&lt;0000000057e9dcbb&gt;] btrfs_check_data_free_space+0x5c/0xa0 [btrfs] [&lt;0000000019c4511d&gt;] +0x1b/0xa0 [btrfs] [&lt;000000006d37e007&gt;] btrfs_dio_iomap_begin+0x415/0x970 [btrfs ] [&lt;00000000fb8a74b8&gt;] iomap_iter+0x161/0x1e0 [&lt;0000000071dff6ff&gt;] __iomap_dio_rw+0x1df/0x700 [&lt;000000002567ba53&gt;] iomap_dio_rw+0x5/0x20 [&lt;000000 0072e555f8&gt;] btrfs_file_write_iter+0x290/0x530 [btrfs] [&lt;000000005eb3d845&gt;] new_sync_write +0x106/0x180 [&lt;000000003fb505bf&gt;] vfs_write+0x24d/0x2f0 [&lt;000000009bb57d37&gt;] __x64_sys_pwrite64+0x69/0xa0 [&lt;000000003eba3fdf&gt;] 3/0x90 En caso de que brtfs_qgroup_reserve_data() o btrfs_delalloc_reserve_metadata() fallen, el conjunto de cambios asignado no será liberado. Entonces, en btrfs_check_data_free_space() y btrfs_delalloc_reserve_space() libera el extend_changeset asignado para deshacerte de la memoria asignada. Actualmente, el problema solo ocurre en la ruta de escritura de IO directa, pero solo después de 65b3c08606e5 ("btrfs: corrige la falla de ENOSPC al intentar escribir IO directa en el rango NOCOW"), y también en defrag_one_locked_target(). Todos los demás lugares siempre llaman a extend_changeset_free() incluso si su llamada a btrfs_delalloc_reserve_space() o btrfs_check_data_free_space() ha fallado.

24 May 2024, 15:15

Type Values Removed Values Added
New CVE

Information

Published : 2024-05-24 15:15

Updated : 2025-09-24 19:20


NVD link : CVE-2021-47508

Mitre link : CVE-2021-47508

CVE.ORG link : CVE-2021-47508


JSON object : View

Products Affected

linux

  • linux_kernel
CWE
CWE-401

Missing Release of Memory after Effective Lifetime