Vulnerabilidad en Linux (CVE-2025-71069)
Gravedad:
Pendiente de análisis
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
13/01/2026
Última modificación:
15/04/2026
Descripción
En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:<br />
<br />
f2fs: invalidar la caché de dentry en la creación fallida de whiteout<br />
<br />
F2FS puede montar sistemas de archivos con valores de profundidad de directorio corruptos que se ajustan en tiempo de ejecución a MAX_DIR_HASH_DEPTH. Cuando se realizan operaciones RENAME_WHITEOUT en dichos directorios, f2fs_rename realiza modificaciones de directorio (actualizando la entrada de destino y eliminando la entrada de origen) antes de intentar añadir la entrada de whiteout a través de f2fs_add_link.<br />
<br />
Si f2fs_add_link falla debido a la estructura de directorio corrupta, la función devuelve un error a VFS, pero las modificaciones parciales del directorio ya se han confirmado en el disco. VFS asume que toda la operación de renombrado falló y no actualiza la caché de dentry, dejando mapeos obsoletos.<br />
<br />
En la ruta de error, VFS no llama a d_move() para actualizar la caché de dentry. Esto resulta en que new_dentry sigue apuntando al antiguo inodo (new_inode) al que ya se le ha decrementado su i_nlink a cero. La caché obsoleta causa que las operaciones subsiguientes referencien incorrectamente el inodo liberado.<br />
<br />
Esto hace que las operaciones subsiguientes utilicen información de dentry en caché que ya no coincide con el estado en disco. Cuando un segundo renombrado apunta a la misma entrada, VFS intenta decrementar i_nlink en el inodo obsoleto, que ya puede tener i_nlink=0, lo que activa una ADVERTENCIA en drop_nlink().<br />
<br />
Secuencia de ejemplo:<br />
1. Primer renombrado (RENAME_WHITEOUT): file2 ? file1<br />
- f2fs actualiza la entrada file1 en disco (apunta al inodo 8)<br />
- f2fs elimina la entrada file2 en disco<br />
- f2fs_add_link(whiteout) falla (directorio corrupto)<br />
- Devuelve error a VFS<br />
- VFS no llama a d_move() debido al error<br />
- La caché de VFS todavía tiene: file1 ? inodo 7 (¡obsoleto!)<br />
- el inodo 7 tiene i_nlink=0 (ya decrementado)<br />
<br />
2. Segundo renombrado: file3 ? file1<br />
- VFS usa caché obsoleta: file1 ? inodo 7<br />
- Intenta drop_nlink en el inodo 7 (i_nlink ya es 0)<br />
- ADVERTENCIA en drop_nlink()<br />
<br />
Solucione esto invalidando explícitamente old_dentry y new_dentry cuando f2fs_add_link falla durante la creación de whiteout. Esto fuerza a VFS a actualizarse desde el disco en operaciones subsiguientes, asegurando la consistencia de la caché incluso cuando el renombrado tiene éxito parcialmente.<br />
<br />
Reproductor:<br />
1. Monte la imagen F2FS con i_current_depth corrupto<br />
2. renameat2(file2, file1, RENAME_WHITEOUT)<br />
3. renameat2(file3, file1, 0)<br />
4. El sistema activa una ADVERTENCIA en drop_nlink()
Impacto
Referencias a soluciones, herramientas e información
- https://git.kernel.org/stable/c/0dde30753c1e8648665dbe069d814e540ce2fd37
- https://git.kernel.org/stable/c/3d65e27e57aaa9d66709fda4cbfb62a87c04a3f5
- https://git.kernel.org/stable/c/3d95ed8cf980fdfa67a3ab9491357521ae576168
- https://git.kernel.org/stable/c/64587ab4d1f16fc94f70e04fa87b2e3f69f8a7bb
- https://git.kernel.org/stable/c/7f2bae0c881aa1e0a6318756df692cc13df2cc83
- https://git.kernel.org/stable/c/c89845fae250efdd59c1d4ec60e9e1c652cee4b6
- https://git.kernel.org/stable/c/d33f89b34aa313f50f9a512d58dd288999f246b0



