Vulnerabilidad en kernel de Linux (CVE-2024-57896)
Gravedad CVSS v3.1:
ALTA
Tipo:
CWE-416
Utilización después de liberación
Fecha de publicación:
15/01/2025
Última modificación:
11/02/2025
Descripción
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: btrfs: vaciar la cola de trabajadores delalloc antes de detener el kthread del limpiador durante el desmontaje Durante la ruta de desmontaje, en close_ctree(), primero detenemos el kthread del limpiador, utilizando kthread_stop() que libera el task_struct asociado, y luego detenemos y destruimos todas las colas de trabajo. Sin embargo, después de detener el limpiador, es posible que aún tengamos un trabajador de la cola delalloc_workers ejecutando inode.c:submit_compressed_extents(), que llama a btrfs_add_delayed_iput(), que a su vez intenta despertar el kthread del limpiador, que ya se destruyó antes, lo que resulta en un uso después de la liberación en el task_struct. Syzbot informó esto con los siguientes seguimientos de pila: ERROR: KASAN: slab-use-after-free en __lock_acquire+0x78/0x2100 kernel/locking/lockdep.c:5089 Lectura de tamaño 8 en la dirección ffff8880259d2818 por la tarea kworker/u8:3/52 CPU: 1 UID: 0 PID: 52 Comm: kworker/u8:3 No contaminado 6.13.0-rc1-syzkaller-00002-gcdd30ebb1b9f #0 Nombre del hardware: Google Google Compute Engine/Google Compute Engine, BIOS Google 13/09/2024 Cola de trabajo: btrfs-delalloc btrfs_work_helper Seguimiento de llamadas: __dump_stack lib/dump_stack.c:94 [en línea] dump_stack_lvl+0x241/0x360 lib/dump_stack.c:120 print_address_description mm/kasan/report.c:378 [en línea] print_report+0x169/0x550 mm/kasan/report.c:489 kasan_report+0x143/0x180 mm/kasan/report.c:602 __lock_acquire+0x78/0x2100 kernel/locking/lockdep.c:5089 lock_acquire+0x1ed/0x550 kernel/locking/lockdep.c:5849 __raw_spin_lock_irqsave incluir/linux/spinlock_api_smp.h:110 [en línea] _raw_spin_lock_irqsave+0xd5/0x120 kernel/locking/spinlock.c:162 class_raw_spinlock_irqsave_constructor include/linux/spinlock.h:551 [en línea] try_to_wake_up+0xc2/0x1470 kernel/sched/core.c:4205 submit_compressed_extents+0xdf/0x16e0 fs/btrfs/inode.c:1615 run_ordered_work fs/btrfs/async-thread.c:288 [en línea] btrfs_work_helper+0x96f/0xc40 fs/btrfs/async-thread.c:324 process_one_work kernel/workqueue.c:3229 [en línea] process_scheduled_works+0xa66/0x1840 kernel/workqueue.c:3310 Asignado por la tarea 2: kasan_save_stack mm/kasan/common.c:47 [en línea] kasan_save_track+0x3f/0x80 mm/kasan/common.c:68 unpoison_slab_object mm/kasan/common.c:319 [en línea] __kasan_slab_alloc+0x66/0x80 mm/kasan/common.c:345 kasan_slab_alloc include/linux/kasan.h:250 [en línea] gancho de alloc de publicación de losa mm/slub.c:4104 [en línea] nodo de alloc de losa mm/slub.c:4153 [en línea] nodo de alloc de caché kmem_noprof+0x1d9/0x380 mm/slub.c:4205 nodo de estructura de tareas de asignación kernel/fork.c:180 [en línea] estructura de tareas dup+0x57/0x8c0 kernel/fork.c:1113 proceso de copia+0x5d1/0x3d50 kernel/fork.c:2225 clon de kernel+0x223/0x870 kernel/fork.c:2807 kernel_thread+0x1bc/0x240 kernel/fork.c:2869 create_kthread kernel/kthread.c:412 [en línea] kthreadd+0x60d/0x810 kernel/kthread.c:767 ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244 Liberado por la tarea 24: kasan_save_stack mm/kasan/common.c:47 [en línea] kasan_save_track+0x3f/0x80 mm/kasan/common.c:68 kasan_save_free_info+0x40/0x50 mm/kasan/generic.c:582 poison_slab_object mm/kasan/common.c:247 [en línea] __kasan_slab_free+0x59/0x70 mm/kasan/common.c:264 kasan_slab_free include/linux/kasan.h:233 [en línea] gancho slab_free mm/slub.c:2338 [en línea] slab_free mm/slub.c:4598 [en línea] kmem_cache_free+0x195/0x410 mm/slub.c:4700 put_task_struct include/linux/sched/task.h:144 [en línea] delayed_put_task_struct+0x125/0x300 kernel/exit.c:227 rcu_do_batch kernel/rcu/tree.c:2567 [en línea] rcu_core+0xaaa/0x17a0 kernel/rcu/tree.c:2823 handle_softirqs+0x2d4/0x9b0 kernel/softirq.c:554 run_ksoftirqd+0xca/0x130 kernel/softirq.c:943 ---truncado---
Impacto
Puntuación base 3.x
7.80
Gravedad 3.x
ALTA
Productos y versiones vulnerables
CPE | Desde | Hasta |
---|---|---|
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.10.233 (excluyendo) | |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.11 (incluyendo) | 5.15.176 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.16 (incluyendo) | 6.1.124 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.2 (incluyendo) | 6.6.70 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.7 (incluyendo) | 6.12.9 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:6.13:rc1:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.13:rc2:*:*:*:*:*:* |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página
Referencias a soluciones, herramientas e información
- https://git.kernel.org/stable/c/1ea629e7bb2fb40555e5e01a1b5095df31287017
- https://git.kernel.org/stable/c/35916b2f96505a18dc7242a115611b718d9de725
- https://git.kernel.org/stable/c/63f4b594a688bf922e8691f0784679aa7af7988c
- https://git.kernel.org/stable/c/a2718ed1eb8c3611b63f8933c7e68c8821fe2808
- https://git.kernel.org/stable/c/d77a3a99b53d12c061c007cdc96df38825dee476
- https://git.kernel.org/stable/c/f10bef73fb355e3fc85e63a50386798be68ff486