Re: optimisation vs securite
[ Nouvelle discussion
| Répondre au groupe
|
fr.comp.lang.c ]
Sujet: Re: optimisation vs securite
De: es...@lain.home (Marc Espie)
Groupes: fr.comp.lang.c
Organisation: Nerim -- xDSL Internet Provider
Date: 08. May 2008, 09:35:50
References: 1
|
In article <48f8f5-cvo.ln1@prout.stex>,
Thierry B. <tth@prout.stex.invalid> wrote:
>Bonjour les codeurz...
>
>En me promenant dans le grand ouèbe mondial, je suis tombé sur
>cet article: http://lwn.net/Articles/278137/ qui évoque des
>problèmes de potentiels buffer-overflow quand Gcc (et d'autres)
>optimisent un peu trop sur certaines condition/tests.
Ca fait un moment que le zele des constructeurs de compilateurs a faire
des trucs qui vont le plus vite possible aux benchmarks posent quelques
problemes aux programmes reels.
Le chiendent, c'est que certains tests et certaines instructions, rajoutees
pour securiser du code, ne font pas forcement partie des `defined behavior'.
C, initialement, c'est cense etre un assembleur portable. Ca veut entre
autres dire qu'il y a des bouts qui sont censes etre dependants de
l'architecture. Lorsque GCC cesse de fournir des constructions supplementaires
propres pour traiter ces cas en plus, ou ne possede pas une representation
fiable de l'archi en question, ca commence a merder.
L'ennui, c'est qu'il n'y a aucun autre compilo `libre' digne de ce nom
susceptible de le remplacer pour l'instant.
L'article en question correspond a une vision des pointeurs qui ne correspond
pas forcement a la realite de la machine, et aux cas ou ca merde.
Je pourrais citer le strict-aliasing, qui a pose bien des problemes (et les
enormes difficultes de comprehension de restrict qui vont avec).
Ou alors, la capacite des gcc recents a faire disparaitre des memset a 0,
s'ils touchent des variables non utilisees ensuite (pratique commune pour
virer des mot de passe en clair avant de poursuivre le programme), sachant
qu'il n'y a PAS de construction raisonnable permettant d'avoir la
semantique voulue (volatile n'en est pas une, puisqu'elle va generalement
plomber le temps de calcul lie au mot de passe en question).
Ou alors, les histoires d'asm et de volatile asm dans les gcc recents
qui merdoient un tantinet, en particulier qui sont quand meme susceptibles
de pas mal `flotter' dans le code et donc de pourrir pas mal de trucs.

|
 cette fonctionnalité est reservée aux membres ayant une session active !
|