Dónde falló el cálculo
CVE-2025-37858 afecta al dimensionamiento de los grupos de asignación en dbExtendFS(), en fs/jfs/jfs_dmap.c. El cálculo usaba 1 << l2agsize. El anuncio del CVE de Linux describe desplazamientos superiores a 31 en sistemas de 32 bits, que producen un comportamiento indefinido y tamaños de grupo de asignación no válidos.
El matiz está en la propia expresión. El literal entero 1 no se convierte en un operando de 64 bits porque el resultado vaya a almacenarse en un campo más amplio. Primero se evalúa el desplazamiento y después se realiza la asignación. Revisar solo el tipo de destino pasa por alto la operación que crea el valor.
Ampliar el operando antes del desplazamiento
La corrección convierte el operando izquierdo a s64 antes del desplazamiento. Así la operación usa la anchura prevista y coincide con el campo del tamaño del grupo de asignación. La comparación siguiente muestra el cambio en la expresión documentado en el anuncio.
Convertir la expresión ya calculada llegaría demasiado tarde. La misma distinción merece atención en las multiplicaciones y en los cálculos de tamaño de asignación. Un tipo intermedio más amplio también necesita una comprobación de rango adecuada; ampliar el tipo no hace por sí solo que cualquier entrada sea segura.
- bmp->db_agsize = 1 << l2agsize;
+ bmp->db_agsize = (s64)1 << l2agsize;Revisar los valores intermedios
Anote los tipos efectivos de los operandos, el signo y el rango válido de entrada de cada cálculo de tamaño. Compruebe la expresión antes de la asignación, incluidas las promociones y las conversiones explícitas. Revise tanto las configuraciones de 32 como de 64 bits admitidas cuando afecten a los tipos o a la compilación.
Las pruebas de límites deben ejercitar los valores en torno al límite previsto y verificar el tamaño resultante o el rechazo. Los sanitizadores y el análisis estático pueden ayudar, pero el revisor sigue teniendo que relacionar la aritmética con las suposiciones de la operación siguiente.
Por qué importa más allá de los sistemas de archivos
El anuncio público describe posibles corrupciones del sistema de archivos y caídas del kernel debidas a un tamaño de grupo no válido. No establece el impacto de una expresión aparentemente similar en su aplicación; para eso hay que seguir el resultado hasta quienes lo consumen.
Este patrón de revisión es útil en aplicaciones nativas que manejan longitudes, desplazamientos, búferes y metadatos de archivos no fiables. Una revisión de seguridad del código bien acotada puede examinar el cálculo y las operaciones de memoria o almacenamiento que controla. Para los paquetes de Linux desplegados, utilice el registro CVE vigente y el aviso del proveedor para determinar el estado de la corrección.
Fuentes
Registro de la vulnerabilidad
CVE-2025-37858¿Necesita que se compruebe esto en su propio producto?
Revisión de seguridad del código¿Quiere aprender a encontrar vulnerabilidades como esta por su cuenta?
Curso individual de revisión de código seguro