(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: gcc, seguridad
El tema es que ha cambiado el comportamiento, antes detectaba fallos y ahora no.
ResponderEliminarPor 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...
Algo más de el ruido y la furia de los desarrolladores de gcc :)
ResponderEliminarSip, 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)
ResponderEliminar