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

Vulnerabilidad en crypto: amlogic - avoid double cleanup in meson_crypto_probe() (CVE-2026-64599)

Gravedad CVSS v3.1:
ALTA
Tipo:
CWE-415 Doble liberación
Fecha de publicación:
06/08/2026
Última modificación:
24/10/2026

Descripción

En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:<br /> <br /> crypto: amlogic - evitar doble limpieza en meson_crypto_probe()<br /> <br /> Cuando meson_allocate_chanlist() falla después de una asignación parcial, ya deshace el estado de la lista de canales asignada a través de su ruta de error local. meson_crypto_probe() luego salta a error_flow y llama a meson_free_chanlist() de nuevo, causando que los mismos recursos por flujo sean desmantelados dos veces. En la ruta de fallo reproducida, el segundo desmantelamiento reingresó a crypto_engine_exit() en un worker ya destruido y KASAN informó un uso después de liberación de slab en kthread_destroy_worker().<br /> <br /> Evitar la doble liberación manejando los fallos de asignación parcial localmente dentro de meson_allocate_chanlist() y omitiendo la ruta de limpieza externa.<br /> <br /> El error fue señalado por primera vez por una herramienta de análisis experimental que estamos desarrollando para errores de gestión de memoria del kernel mientras analizábamos v6.13-rc1. La herramienta aún está en desarrollo y aún no está disponible públicamente.<br /> <br /> El error fue reproducido en un invitado QEMU x86_64 arrancado con KASAN en v7.1, usando el reproductor bajo tools/testing/meson_crypto_probe. El reproductor fuerza la segunda llamada a dma_alloc_attrs() en la ruta de sondeo gxl-crypto a devolver NULL, haciendo que meson_allocate_chanlist() falle después de una inicialización parcial. En el kernel sin parchear, esto desencadenó de forma fiable un uso después de liberación de slab. Con esta corrección aplicada, el mismo reproductor ya no emite ningún informe KASAN y el sondeo falla limpiamente con -ENOMEM.<br /> <br /> ==================================================================<br /> BUG: KASAN: uso después de liberación de slab en kthread_destroy_worker+0xb2/0xd0<br /> Lectura de tamaño 8 en la dirección ff1100010c057a68 por la tarea insmod/265<br /> <br /> CPU: 1 UID: 0 PID: 265 Comm: insmod Tainted: G O 7.1.0-rc2-00376-g810af9adc907-dirty #10 PREEMPT(lazy)<br /> Tainted: [O]=OOT_MODULE<br /> Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.15.0-1 04/01/2014<br /> Rastro de Llamada:<br /> [TAREA]<br /> dump_stack_lvl+0x68/0xa0<br /> print_report+0xcb/0x5e0<br /> ? __virt_addr_valid+0x21d/0x3f0<br /> ? kthread_destroy_worker+0xb2/0xd0<br /> ? kthread_destroy_worker+0xb2/0xd0<br /> kasan_report+0xca/0x100<br /> ? kthread_destroy_worker+0xb2/0xd0<br /> kthread_destroy_worker+0xb2/0xd0<br /> meson_crypto_probe+0x4d0/0xc10 [amlogic_gxl_crypto]<br /> platform_probe+0x99/0x140<br /> really_probe+0x1c6/0x6a0<br /> ? __pfx___device_attach_driver+0x10/0x10<br /> __driver_probe_device+0x248/0x310<br /> ? acpi_driver_match_device+0xb0/0x100<br /> driver_probe_device+0x48/0x210<br /> ? __pfx___device_attach_driver+0x10/0x10<br /> __device_attach_driver+0x160/0x320<br /> bus_for_each_drv+0x104/0x190<br /> ? __pfx_bus_for_each_drv+0x10/0x10<br /> ? _raw_spin_unlock_irqrestore+0x2c/0x50<br /> __device_attach+0x19d/0x3b0<br /> ? __pfx___device_attach+0x10/0x10<br /> ? do_raw_spin_unlock+0x53/0x220<br /> device_initial_probe+0x78/0xa0<br /> bus_probe_device+0x5b/0x130<br /> device_add+0xcfd/0x1430<br /> ? __pfx_device_add+0x10/0x10<br /> ? insert_resource+0x34/0x50<br /> ? lock_release+0xc9/0x290<br /> platform_device_add+0x24e/0x590<br /> ? __pfx_meson_crypto_probe_repro_init+0x10/0x10 [meson_crypto_probe_repro]<br /> meson_crypto_probe_repro_init+0x330/0xff0 [meson_crypto_probe_repro]<br /> do_one_initcall+0xc0/0x450<br /> ? __pfx_do_one_initcall+0x10/0x10<br /> ? _raw_spin_unlock_irqrestore+0x2c/0x50<br /> ? __create_object+0x59/0x80<br /> ? kasan_unpoison+0x27/0x60<br /> do_init_module+0x27b/0x7d0<br /> ? __pfx_do_init_module+0x10/0x10<br /> ? kasan_quarantine_put+0x84/0x1d0<br /> ? kfree+0x32c/0x510<br /> ? load_module+0x561e/0x5ff0<br /> load_module+0x54fe/0x5ff0<br /> ? __pfx_load_module+0x10/0x10<br /> ? security_file_permission+0x20/0x40<br /> ? kernel_read_file+0x23d/0x6e0<br /> ? mmap_region+0x235/0x4a0<br /> ? __pfx_kernel_read_file+0x10/0x10<br /> ? __file_has_perm+0x2c0/0x3e0<br /> init_module_from_file+0x158/0x180<br /> ? --TRUNCADO--