CVE-2026-74580 in Linux
Resumen
por VulDB • 2026-08-21
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
vhost: restablecer la caché de metadatos del vring durante su reconfiguración
`vq->meta_iotlb[]` almacena en caché `vhost_iotlb_map`, que respalda cada región de metadatos del vring, y `iotlb_access_ok()` devuelve un resultado temprano (early return) ante una coincidencia en la caché, tomando dicha coincidencia como prueba de que la región ya ha sido validada:
```c if (vhost_vq_meta_fetch(vq, addr, len, type)) return true; ```
La caché se restablece durante `VHOST_IOTLB_UPDATE` y `VHOST_IOTLB_INVALIDATE`, en el reinicio inicial del IOTLB del dispositivo y al resetear vq, pero no cuando `VHOST_SET_VRING_ADDR` reemplaza `vq->desc`, `vq->avail` y `vq->used`, ni cuando `VHOST_SET_VRING_NUM` cambia los tamaños de las regiones.
Con un IOTLB del dispositivo adjunto, ambos ioctls son aceptados mientras vq está activo (live), y ninguno valida las direcciones en el momento de la llamada al ioctl: `vq_access_ok()` y `vq_log_used_access_ok()` devuelven true temprano porque las direcciones son GIOVAs, posponiendo la validación hasta el momento del prefetch. Una vez que la caché se ha poblado, dicha validación diferida ya no se ejecuta; `vq_meta_prefetch()` encuentra la entrada obsoleta y devuelve true, por lo que `vhost_vq_meta_fetch()` sigue traduciendo a través de la antigua asignación como:
```c map->addr + addr - map->start ```
para una dirección cuya asignación ya no cubre. `vhost_copy_to_user()` y `vhost_copy_from_user()` consumen el resultado con `__copy_to_user()` y `__copy_from_user()`, los cuales tampoco lo verifican, por lo que una actualización posterior del anillo de usados (used ring) o la obtención de un descriptor accede a memoria fuera de la región que mapea realmente el IOTLB.
Restablecer la caché de metadatos cada vez que se reconfigure el vring, para que las nuevas direcciones pasen por nuevo camino lento (slow path) de `iotlb_access_ok()`.
If you want to get best quality of vulnerability data, you may have to visit VulDB.