Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

CVE-2023-53538

Gravedad:
Pendiente de análisis
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
04/10/2025
Última modificación:
06/10/2025

Descripción

*** Pendiente de traducción *** In the Linux kernel, the following vulnerability has been resolved:<br /> <br /> btrfs: insert tree mod log move in push_node_left<br /> <br /> There is a fairly unlikely race condition in tree mod log rewind that<br /> can result in a kernel panic which has the following trace:<br /> <br /> [530.569] BTRFS critical (device sda3): unable to find logical 0 length 4096<br /> [530.585] BTRFS critical (device sda3): unable to find logical 0 length 4096<br /> [530.602] BUG: kernel NULL pointer dereference, address: 0000000000000002<br /> [530.618] #PF: supervisor read access in kernel mode<br /> [530.629] #PF: error_code(0x0000) - not-present page<br /> [530.641] PGD 0 P4D 0<br /> [530.647] Oops: 0000 [#1] SMP<br /> [530.654] CPU: 30 PID: 398973 Comm: below Kdump: loaded Tainted: G S O K 5.12.0-0_fbk13_clang_7455_gb24de3bdb045 #1<br /> [530.680] Hardware name: Quanta Mono Lake-M.2 SATA 1HY9U9Z001G/Mono Lake-M.2 SATA, BIOS F20_3A15 08/16/2017<br /> [530.703] RIP: 0010:__btrfs_map_block+0xaa/0xd00<br /> [530.755] RSP: 0018:ffffc9002c2f7600 EFLAGS: 00010246<br /> [530.767] RAX: ffffffffffffffea RBX: ffff888292e41000 RCX: f2702d8b8be15100<br /> [530.784] RDX: ffff88885fda6fb8 RSI: ffff88885fd973c8 RDI: ffff88885fd973c8<br /> [530.800] RBP: ffff888292e410d0 R08: ffffffff82fd7fd0 R09: 00000000fffeffff<br /> [530.816] R10: ffffffff82e57fd0 R11: ffffffff82e57d70 R12: 0000000000000000<br /> [530.832] R13: 0000000000001000 R14: 0000000000001000 R15: ffffc9002c2f76f0<br /> [530.848] FS: 00007f38d64af000(0000) GS:ffff88885fd80000(0000) knlGS:0000000000000000<br /> [530.866] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033<br /> [530.880] CR2: 0000000000000002 CR3: 00000002b6770004 CR4: 00000000003706e0<br /> [530.896] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000<br /> [530.912] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400<br /> [530.928] Call Trace:<br /> [530.934] ? btrfs_printk+0x13b/0x18c<br /> [530.943] ? btrfs_bio_counter_inc_blocked+0x3d/0x130<br /> [530.955] btrfs_map_bio+0x75/0x330<br /> [530.963] ? kmem_cache_alloc+0x12a/0x2d0<br /> [530.973] ? btrfs_submit_metadata_bio+0x63/0x100<br /> [530.984] btrfs_submit_metadata_bio+0xa4/0x100<br /> [530.995] submit_extent_page+0x30f/0x360<br /> [531.004] read_extent_buffer_pages+0x49e/0x6d0<br /> [531.015] ? submit_extent_page+0x360/0x360<br /> [531.025] btree_read_extent_buffer_pages+0x5f/0x150<br /> [531.037] read_tree_block+0x37/0x60<br /> [531.046] read_block_for_search+0x18b/0x410<br /> [531.056] btrfs_search_old_slot+0x198/0x2f0<br /> [531.066] resolve_indirect_ref+0xfe/0x6f0<br /> [531.076] ? ulist_alloc+0x31/0x60<br /> [531.084] ? kmem_cache_alloc_trace+0x12e/0x2b0<br /> [531.095] find_parent_nodes+0x720/0x1830<br /> [531.105] ? ulist_alloc+0x10/0x60<br /> [531.113] iterate_extent_inodes+0xea/0x370<br /> [531.123] ? btrfs_previous_extent_item+0x8f/0x110<br /> [531.134] ? btrfs_search_path_in_tree+0x240/0x240<br /> [531.146] iterate_inodes_from_logical+0x98/0xd0<br /> [531.157] ? btrfs_search_path_in_tree+0x240/0x240<br /> [531.168] btrfs_ioctl_logical_to_ino+0xd9/0x180<br /> [531.179] btrfs_ioctl+0xe2/0x2eb0<br /> <br /> This occurs when logical inode resolution takes a tree mod log sequence<br /> number, and then while backref walking hits a rewind on a busy node<br /> which has the following sequence of tree mod log operations (numbers<br /> filled in from a specific example, but they are somewhat arbitrary)<br /> <br /> REMOVE_WHILE_FREEING slot 532<br /> REMOVE_WHILE_FREEING slot 531<br /> REMOVE_WHILE_FREEING slot 530<br /> ...<br /> REMOVE_WHILE_FREEING slot 0<br /> REMOVE slot 455<br /> REMOVE slot 454<br /> REMOVE slot 453<br /> ...<br /> REMOVE slot 0<br /> ADD slot 455<br /> ADD slot 454<br /> ADD slot 453<br /> ...<br /> ADD slot 0<br /> MOVE src slot 0 -&gt; dst slot 456 nritems 533<br /> REMOVE slot 455<br /> REMOVE slot 454<br /> REMOVE slot 453<br /> ...<br /> REMOVE slot 0<br /> <br /> When this sequence gets applied via btrfs_tree_mod_log_rewind, it<br /> allocates a fresh rewind eb, and first inserts the correct key info for<br /> the 533 elements, then overwrites the first 456 of them, then decrements<br /> the count by 456 via the add ops, then rewinds the move by doing a<br /> memmove from 456:988-&gt;0:532. We have never written anything past 532,<br /> ---truncated---

Impacto