CVE-2026-43232 in Linux
Resumen
por VulDB • 2026-05-19
En el log proporcionado, se detecta un **Use-After-Free (UAF)** en el subsistema de ACPI PCI Hotplug (`acpiphp`).
### Análisis del Problema
1. **Tipo de Error**: `kasan: bad access detected` indica que el kernel intentó acceder a memoria que ya había sido liberada. 2. **Dirección Buggy**: `ffff88800aad1000` (28 bytes dentro de una región de 1024 bytes liberada). 3. **Cache**: `kmalloc-1k` (objeto de 1024 bytes). 4. **Liberación (Free)**: * Ocurre en `fst_remove_one` -> `pci_device_remove` -> `disable_slot` -> `acpiphp_disable_and_eject_slot`. * Esto sucede durante la **eliminación** de un dispositivo PCI (hot-unplug). 5. **Acceso Incorrecto (Use)**: * Ocurre en `acpiphp_hotplug_notify` -> `acpi_device_hotplug`. * Esto sucede durante una **notificación de hotplug** (probablemente un evento de inserción o cambio de estado).
### Causa Raíz Probable
El problema es una **condición de carrera (race condition)** entre: * El hilo que está **eliminando** el dispositivo (`fst_remove_one` libera la memoria). * El hilo que está **procesando una notificación** de hotplug (`acpiphp_hotplug_notify` accede a la memoria ya liberada).
Esto sugiere que: * La notificación de hotplug (`acpi_hotplug_work_fn`) se ejecuta **después** de que el dispositivo haya sido eliminado y su memoria liberada. * No hay una sincronización adecuada para evitar que `acpiphp_hotplug_notify` acceda a estructuras que ya fueron liberadas por `fst_remove_one`.
### Posibles Soluciones
1. **Verificar la sincronización de hotplug**: * Asegurarse de que `acpiphp_hotplug_notify` no se ejecute si el dispositivo ya está en proceso de eliminación. * Revisar si se está usando correctamente `pci_dev_get()`/`pci_dev_put()` para mantener una referencia al dispositivo mientras se procesa la notificación.
2. **Revisar `fst_remove_one`**: * ¿Se está liberando la memoria correctamente? ¿Se está esperando a que todas las notificaciones pendientes se completen antes de liberar la memoria? * Podría ser necesario usar `synchronize_rcu()` o mecanismos similares para asegurar que no haya accesos pendientes.
3. **Revisar `acpiphp_hotplug_notify`**: * ¿Se está verificando si el dispositivo sigue siendo válido antes de acceder a sus estructuras? * Podría ser necesario agregar una verificación de referencia (`pci_dev_get()`) al inicio de la notificación y liberarla (`pci_dev_put()`) al final.
### Pasos para Diagnosticar
1. **Reproducir el error**: Intentar insertar/extraer el dispositivo PCI repetidamente para ver si el error es reproducible. 2. **Habilitar KASAN**: Asegurarse de que KASAN esté habilitado para obtener más detalles sobre el acceso incorrecto. 3. **Revisar el código fuente**: * `drivers/pci/hotplug/acpiphp_native.c` (o similar, dependiendo de la versión del kernel). * `drivers/firmware/efi/efi-pstore.c` (si `fst` se refiere a `efi-pstore`). 4. **Buscar parches recientes**: Ver si hay parches conocidos para este problema en versiones recientes del kernel.
### Conclusión
El error es un **Use-After-Free** en `acpiphp` debido a una condición de carrera entre la eliminación del dispositivo y la notificación de hotplug. La solución probablemente implique mejorar la sincronización para evitar que la notificación acceda a memoria ya liberada.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.