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

Vulnerabilidad en kernel de Linux (CVE-2024-50225)

Gravedad CVSS v3.1:
MEDIA
Tipo:
CWE-476 Desreferencia a puntero nulo (NULL)
Fecha de publicación:
09/11/2024
Última modificación:
13/11/2024

Descripción

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: btrfs: corregir la propagación de errores de bios divididas El propósito de btrfs_bbio_propagate_error() debe ser propagar un error de bio dividida a su btrfs_bio original y comunicar el error a la capa superior. Sin embargo, no está funcionando bien en algunos casos. * Caso 1. End_bio inmediato (o rápido) con un error Cuando btrfs envía btrfs_bio a dispositivos reflejados, btrfs llama a btrfs_bio_end_io() cuando se completan todos los bios reflejados. Si ese btrfs_bio se dividió, es de btrfs_clone_bioset y su función end_io es btrfs_orig_write_end_io. Para este caso, btrfs_bbio_propagate_error() accede al contexto bio de orig_bbio para aumentar el recuento de errores. Eso funciona bien en la mayoría de los casos. Sin embargo, si se llama a end_io lo suficientemente rápido, es posible que el contexto bio de orig_bbio (la parte restante después de la división) no se configure correctamente en ese momento. Dado que el contexto bio se configura cuando se envía orig_bbio (el último btrfs_bio) a los dispositivos, puede que sea demasiado tarde para que se complete la división anterior de btrfs_bio. Eso dará como resultado la desreferencia del puntero NULL. Ese error se puede reproducir fácilmente ejecutando btrfs/146 en dispositivos zonificados [1] y muestra el siguiente rastro. [1] Necesita la función raid-stripe-tree, ya que crea el sistema de archivos "-d raid0 -m raid1". ERROR: desreferencia de puntero NULL del kernel, dirección: 0000000000000020 #PF: acceso de lectura del supervisor en modo kernel #PF: error_code(0x0000) - página no presente PGD 0 P4D 0 Oops: Oops: 0000 [#1] PREEMPT SMP PTI CPU: 1 UID: 0 PID: 13 Comm: kworker/u32:1 No contaminado 6.11.0-rc7-BTRFS-ZNS+ #474 Nombre del hardware: Bochs Bochs, BIOS Bochs 01/01/2011 Cola de trabajo: escritura diferida wb_workfn (flush-btrfs-5) RIP: 0010:btrfs_bio_end_io+0xae/0xc0 [btrfs] Error BTRFS (dispositivo dm-0): bdev /dev/mapper/error-test errores: wr 2, rd 0, vaciado 0, corrupto 0, generación 0 RSP: 0018:ffffc9000006f248 EFLAGS: 00010246 RAX: 0000000000000000 RBX: ffff888005a7f080 RCX: ffffc9000006f1dc RDX: 0000000000000000 RSI: 000000000000000a RDI: ffff888005a7f080 RBP: ffff888011dfc540 R08: 0000000000000000 R09: 0000000000000001 R10: ffffffff82e508e0 R11: 0000000000000005 R12: ffff88800ddfbe58 R13: ffff888005a7f080 R14: ffff888005a7f158 R15: ffff888005a7f158 FS: 000000000000000(0000) GS:ffff88803ea80000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 000000000000020 CR3: 0000000002e22006 CR4: 0000000000370ef0 DR0: 00000000000000000 DR1: 00000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Seguimiento de llamadas: ? __die_body.cold+0x19/0x26 ? page_fault_oops+0x13e/0x2b0 ? _printk+0x58/0x73 ? do_user_addr_fault+0x5f/0x750 ? btrfs_log_dev_io_error+0x7f/0x90 [btrfs] btrfs_orig_write_end_io+0x51/0x90 [btrfs] dm_submit_bio+0x5c2/0xa50 [dm_mod] ? blk_try_enter_queue+0x90/0x1e0 __submit_bio+0xe0/0x130 ? ktime_get+0x10a/0x160 ? lockdep_hardirqs_on+0x74/0x100 submit_bio_noacct_nocheck+0x199/0x410 btrfs_submit_bio+0x7d/0x150 [btrfs] btrfs_submit_chunk+0x1a1/0x6d0 [btrfs]? lockdep_hardirqs_on+0x74/0x100? __folio_start_writeback+0x10/0x2c0 btrfs_submit_bbio+0x1c/0x40 [btrfs] submit_one_bio+0x44/0x60 [btrfs] submit_extent_folio+0x13f/0x330 [btrfs] ? btrfs_set_range_writeback+0xa3/0xd0 [btrfs] extend_writepage_io+0x18b/0x360 [btrfs] extend_write_locked_range+0x17c/0x340 [btrfs] ? __pfx_end_bbio_data_write+0x10/0x10 [btrfs] run_delalloc_cow+0x71/0xd0 [btrfs] btrfs_run_delalloc_range+0x176/0x500 [btrfs] ? buscar_bloqueo_desbloqueado_rango+0x119/0x260 [btrfs] escribir_página_desbloqueado+0x2ab/0x480 [btrfs] extensión_escritura_páginas_caché+0x236/0x7d0 [btrfs] btrfs_escritura_páginas+0x72/0x130 [btrfs] hacer_escritura_páginas+0xd4/0x240 ? buscar_bloqueo_retenido+0x2b/0x80 ? wbc_adjuntar_y_desbloquear_inodo+0x12c/0x290 ? wbc_adjuntar_y_desbloquear_inodo+0x12c/0x29 ---truncado---

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.3 (incluyendo) 6.11.7 (excluyendo)
cpe:2.3:o:linux:linux_kernel:6.12:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.12:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.12:rc3:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.12:rc4:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.12:rc5:*:*:*:*:*:*