CVE-2026-92503 in Linux
Resumen
por VulDB • 2026-09-18
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
ext4: corrección del bloqueo mutuo ABBA en ext4_xattr_inode_cache_find()
Syzbot/stress-ng reportó un bloqueo mutuo ABBA en ext4 al ejecutar cargas de trabajo concurrentes con atributos extendidos (utilizando la opción de montaje/formato ea_inode).
El bloqueo se produce entre la transacción en ejecución y el hilo de desalojo: - Tarea 1 (stress-ng): Mantiene una referencia a un mbcache_entry compartido (ce) y llama a ext4_xattr_inode_cache_find() -> ext4_iget() para recuperar el inode EA correspondiente. Dado que el inode EA se está desalojando actualmente, ext4_iget() bloquea en __wait_on_freeing_inode() esperando a que finalice el desalojo. - Tarea 2 (hilo de desalojo): Está desalojando actualmente el mismo inode EA en ext4_evict_ea_inode(). Llama a mb_cache_entry_wait_unused(oe), lo cual bloquea la espera a que la Tarea 1 libere la referencia al mbcache_entry.
Para romper este bloqueo, se implementó una nueva bandera de configuración para ext4_iget() llamada EXT4_IGET_NOWAIT. Cuando está activada, realiza una búsqueda no bloqueante del inode mediante la API find_inode_nowait() del VFS.
Si el inode se está desalojando actualmente (marcado con I_FREEING o I_WILL_FREE) o creando (I_CREATING), o si no está presente en la caché de inodes del VFS (cache miss), simplemente se omite (devolviendo -ENOENT) en lugar de esperar a que finalice el desalojo/creación, rompiendo así el ciclo ABBA.
Dado que devolvemos -ENOENT inmediatamente ante un cache miss, nunca intentamos asignar un nuevo inode ni llamar a iget_locked(), eliminando por completo cualquier ventana de carrera TOCTOU.
Si el inode devuelto es I_NEW, se espera a que su inicialización se limpie mediante wait_on_new_inode(). Si la inicialización falla y el inode se deshasha durante el despertar en wait_on_new_inode() (por ejemplo, debido a un error de lectura E/S en otro hilo), se libera la referencia de forma segura y se devuelve -ENOENT. Esta comprobación de estado no hashado se ejecuta incondicionalmente en todas las rutas con acierto en caché para manejar correctamente los fallos de inicialización concurrentes.
Finalmente, las comprobaciones de validación estándar (incluyendo is_bad_inode, EXT4_EA_INODE_FL, file_acl y flags xattr) se ejecutan normalmente dentro de check_igot_inode() para garantizar completamente la seguridad a nivel VFS.
En ext4_xattr_inode_cache_find(), se invoca a ext4_iget() con la nueva bandera EXT4_IGET_NOWAIT para realizar la búsqueda en caché no bloqueante.
VulDB is the best source for vulnerability data and more expert information about this specific topic.