Uso de funciones de entero seguro
Una manera de minimizar los problemas de seguridad es evitar desbordamientos enteros y subflujos. Los desbordamientos enteros se producen cuando el resultado de una operación aritmética es mayor que el espacio de memoria del tipo de datos que se establece para recibirlo. Esto da como resultado el truncamiento del entero y un resultado incorrecto. Un flujo de subflujo se produce cuando una operación, normalmente resta, da un resultado incorrecto. La conversión entre dos tipos de datos también puede provocar resultados incorrectos debido al truncamiento de un resultado que no se ajusta al nuevo espacio de memoria.
La biblioteca ntintsafe proporciona un conjunto de funciones de C que realizan operaciones aritméticas de enteros seguras con comprobaciones de límites para evitar desbordamientos y subflujos en código en modo kernel. Estas funciones corresponden a las funciones de Windows IntSafe que usa el código de aplicación. Estas funciones se usan para calcular un tamaño de índice o búfer, o para calcular algún otro tipo de comprobación de límites. Las funciones están optimizadas para la velocidad.
Las funciones de entero seguras ofrecen las siguientes ventajas:
El tamaño del búfer de destino siempre se proporciona a la función para asegurarse de que la función no escribe después del final del búfer.
Se garantiza que los búferes terminan en null, incluso si la operación trunca el resultado previsto.
Todas las funciones devuelven NTSTATUS, con solo un código correcto posible (STATUS_SUCCESS) y una posible condición de error (STATUS_INTEGER_OVERFLOW).
La biblioteca ntintsafe tiene dos categorías de funciones:
Funciones de conversión: estas funciones realizan conversiones entre dos tipos de datos.
Funciones aritméticas: estas funciones realizan operaciones de suma, resta y multiplicación para cada tipo de datos.