Multiplication integer overflow

Es una iniciativa interesante que algunos desarrolladores de OpenBSD tengan un blog en undeadly.

Ejemplo de ello es un artículo muy interesante en Multiplication Considered Harmful, del blog de Ray Lai.

Tampoco es que no haya literatura al respecto, pero me parece que Ray lo ha explicado bastante claro. Al menos eso me ha parecido de buena mañana :).

Un desbordamiento numérico, traducción libre:

Un desbordamiento numérico ocurre cuando una operación hace crecer o disminuir un número fuera de límites, dando como resultado un valor mucho mayor o menor de lo esperado.

El primer ejemplo que nos encontramos está bastante claro:

código c
/* un tipo caracter tiene de tamaño un BYTE, lo que le
 * permite almacenar 256 valores, en este caso del -128 al 127
 * por ser con signo (implícito si no se usa unsigned)
 */
char a, b;
 
a = b = 127;
a = a * b;     /* desbordamiento! */
 
/* esperaríamos que 'a' valiera 16129, pero
 * 'no cabe' dentro de un tipo char, así que obtenemos
 * un 1 como resultado del overflow :o
 */

Esto puede ocurrir con otras operaciones, pero es bastante fácil que pase con una multiplicación.

¿Y qué ocurre cuando el resultado de esa multiplicación va destinado a indicar una cantidad de memoria que queremos reservar? Pues un desastre, y si además uno de los operandos puede ser influido por la entrada del usuario: ahí tenemos una vulnerabilidad ;).


Publicidad

Aviso: Los siguientes comentarios pertenecen a las personas que los han enviado.
El administrador de este sitio web no es responsable de los mismos.

[comentarios] Hay 1 comentario:

Gravatar
31/03/2006 11:55:43
Podría...
por r0sk (IP: 217.130.44.*)
Comentario de r0sk
... ser interesante una segunda parte de esta anotación ¿no crees? (guiño).

! Esta entrada no permite nuevos comentarios.

Los comentarios se bloquean automáticamente tras 15 días desde la publicación del artículo.

Si deseas comentar algo relacionado con el texto, puedes enviarme un e-mail.