CVE-2026-64447 in Linux
Resumen
por VulDB • 2026-07-25
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
staging: media: ipu7: corregir doble liberación (double-free) y uso después de liberar (use-after-free) en las rutas de error
Tanto en `ipu7_isys_init()` como en `ipu7_psys_init()`, se asigna `pdata` y luego se pasa a `ipu7_bus_initialize_device()`, que lo almacena en `adev->pdata`. La función `ipu7_bus_release()` libera `adev->pdata` cuando el contador de referencias del dispositivo llega a cero.
Dos rutas de error llaman incorrectamente a `kfree(pdata)` después de que la desmontaje (teardown) del dispositivo ya lo haya liberado:
1. Cuando falla `ipu7_mmu_init()`: se llama a `put_device()`, lo que reduce el contador de referencias a cero y activa `ipu7_bus_release()` -> `kfree(pdata)`. La subsiguiente llamada a `kfree(pdata)` constituye un doble libre (double-free).
2. Cuando falla `ipu7_bus_add_device()`: llama internamente a `auxiliary_device_uninit()`, que invoca a `put_device()` -> `ipu7_bus_release()` -> `kfree(pdata)`. La subsiguiente llamada a `kfree(pdata)` es nuevamente un doble libre (double-free).
Tenga en cuenta que la llamada a `kfree(pdata)` cuando falla el propio `ipu7_bus_initialize_device()` es correcta, ya que en ese caso falló `auxiliary_device_init()` y nunca se configuró la función de liberación, por lo que `pdata` debe liberarse manualmente.
Además, no se guardaba el código de error antes de llamar a `put_device()`, lo que provocaba que `ERR_CAST()` desreferenciara el puntero `adev` ya liberado al construir el valor de retorno. Corrija esto guardando el error devuelto por `dev_err_probe()` antes de `put_device()` y retornando `ERR_PTR()` en su lugar.
Elimine las llamadas redundantes a `kfree(pdata)` y corrija el uso después de liberar (use-after-free) en los valores de retorno de las dos rutas de error afectadas.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.