miércoles, abril 09, 2008

Una cambio de comportamiento del gcc elimina chequeos de seguridad

(vía heise-online) Acabo de leer este aviso donde se comenta que una optimización del gcc que existe a partir de la versión 4.2 elimina las verificaciones de seguridad, según la siguiente construcción:
char *buf; int len; len = 1 << 30; if (buf+len < buf){   Overflow }
La verificación anterior el gcc la optimiza y desaparece del código generado. La construcción anterior es correcta en C, pero hay que decir que esto es un cambio de comportamiento que se ha producido en el gcc. Puede encontrarse más información en este enlace

Technorati Tags: ,

3 comentarios:

mig21 dijo...

El tema es que ha cambiado el comportamiento, antes detectaba fallos y ahora no.

Por lo que comenta la gente del gcc el comportamiento es perfectamente válido y el chequeo es... dudoso (se chequea con aritmética de punteros, cuando probablemente debería comprobarse si el offset sigue estando en el rango de memoria que hemos reservado...) Están bastante mosqueados, aparte de subrayar que ese comportamiento es el mismo en muchos compiladores.

Aunque bueno, seguramente es interesante para que los programadores se enteren del cambio de comportamiento...

mig21 dijo...

Algo más de el ruido y la furia de los desarrolladores de gcc :)

Drizzt dijo...

Sip, toda la razón :). Hice la anotación para comentar el cambio de comporamiento del gcc. (y si no me falla la memoria, creo que hace años hubo algún follón similar con el kernel de Linux y el gcc por algún cambio de ese estilo)