Code-Optimierung des GCC ermöglicht Pufferüberläufe
Wie Heise Online mit Verweise auf US-CERT meldet, verfügt der GNU C-Compiler (GCC) seit Version 4.1 über einen
Fehler in der Code-Optimierung, der Pufferüberläufe begünstigt. Pufferüberläufe können unter bestimmten Umständen dazu genutzt werden, schädliche Programmanweisungen einzuschleusen. Der Compiler geht bei Verwendung von einem String mit einem Integer davon aus, dass die Summe beider kleiner als der String selbst ist. Allerdings wird dabei unterschlagen, dass der Integer überlaufen kann und dann in den negativen Zahlenbereich rutscht. Entsprechende Sicherheitsabfragen werden dennoch vom Compiler gelöscht. Um die Löschung zu verhindern, muss man vor dem Vergleich die String-Länge in uintptr_t oder size_t umwandeln:
if((size_t)buf+len < (size_t)buf) { ... }
Weiterführende Links: