CVE

Vulnerabilidad en kernel de Linux (CVE-2024-46701)

Severidad:
Pendiente de análisis
Type:
No Disponible / Otro tipo
Fecha de publicación:
13/09/2024
Última modificación:
13/09/2024

Descripción

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: libfs: arregla lecturas de directorio infinitas para el directorio offset Después de cambiar las operaciones de directorio tmpfs de simple_dir_operations a simple_offset_dir_operations, cada cambio de nombre que se produzca llenará new dentry en el árbol de maple del directorio de destino (&SHMEM_I(inode)->dir_offsets->mt) con una clave libre que comienza con octx->newx_offset, y luego establece newx_offset igual a la clave libre + 1. Esto provocará una combinación de lectura de directorio infinita con el cambio de nombre ocurrido al mismo tiempo, lo que falla generic/736 en xfstests (los detalles se muestran a continuación). 1. crear 5000 archivos (1 2 3...) bajo un directorio 2. llamar a readdir(man 3 readdir) una vez, y obtener una entrada 3. renombrar(entrada, "TEMPFILE"), luego renombrar("TEMPFILE", entrada) 4. repetir 2~3 veces, hasta que readdir no devuelva nada o repetimos demasiadas veces (tmpfs interrumpe la prueba con la segunda condición) Elegimos la misma lógica que el commit 9b378f6ad48cf ("btrfs: arregla lecturas infinitas de directorio") para arreglarlo, registrar el last_index cuando abrimos el directorio, y no emitir la entrada cuyo índice >= last_index. El file->private_data que ahora se usa en el directorio de desplazamiento se puede usar directamente para hacer esto, y también actualizamos el last_index cuando buscamos el archivo dir. [brauner: solo actualizamos last_index después de la búsqueda cuando el desplazamiento es cero como sugirió Jan]