OVH Cloud OVH Cloud

UB grave ?

3 réponses
Avatar
Nicolas aunai
salut,


j'ai souvent entendu parler, ici et ailleurs des 'UB' (Undefined
Behavior...) en C... apparement là a cause de fautes de programmations ils
sont des failles pas toujours perceptibles dans nos programmes, et peuvent
faire.. "n'importe quoi" même ce qu'on veut...

je cite "C'est un bug, même si les apparences sont trompeuses. Le principal
danger d'un UB, est qu'il ne provoque pas systématiquement de
dysfonctionnement visible." (emmanuel D.)

ainsi que : "De plus, vu du langage C, c'est 'comportement indéfini (UB),
qui peut provoquer n'importe quel comportement, allant d'un comportement
'normal' (le pire, car on ne se rend compte de rien) au crash
franc et massif avec destruction de données, reformatage du disque dur, ou
largage de bombe sur Bagdad..." (Emmanuel D.)


alors voila... suite à ça j'aimerai en savoir un peu plus sur ces UB, des UB
graves comme des pertes de données a des endroits totalement différents de
ceux sur lesquel le programme bosse etc... peuvent-il vraiment arriver ou
est-ce "théoriquement possible" mais extremement rare ?

dans quelles circonstances ?

vous ait-il déjà arrivé de planter complètement votre machine suite a un UB
? quand je dis planter complètement c'est... boot failure quoi...

<HS perso = raison du post>
bon je vous demande ça parce que hier soir en testant un programme... j'ai
eu des bruits réguliers du coté de mon disque dur (tac tac tac...) et en
environ 15-20 secondes vraouuf écran gelé... 10sec plus tard vraaaouff écran
bleu.... erreur grave etc... puis impossible de rebooter ... on aurait dit
que le disque dur "bloquait" sur un endroit, sur la lecture d'un truc ou
j'sais pas quoi.... bref ça m'a bien foutu les boules.... alors j'me
demande, vu qu'en même temps ma partie de programme testée bugue ;) s'il y
avait une probabilité qu'un UB fasse ça..

le code qui serait la cause est une partie reception réseau allocation
mémoire (200ko max) + écriture sur disque avec fwrite.....

</>

merci

ps : ça pourrait tout aussi bien être un virus ou un trojan sur mon disque,
ou encore n'importe quoi d'autre bien sûr mais firewall + antivirus a jour
m'en font douter....


--
nico, qui sauvegarde son dd....
http://astrosurf.com/nicoastro
messenger : nicolas_aunai@nospam@hotmail.com

3 réponses

Avatar
DINH Viêt Hoà

<HS perso = raison du post>
bon je vous demande ça parce que hier soir en testant un programme... j'ai
eu des bruits réguliers du coté de mon disque dur (tac tac tac...) et en
environ 15-20 secondes vraouuf écran gelé... 10sec plus tard vraaaouff écran
bleu.... erreur grave etc... puis impossible de rebooter ... on aurait dit
que le disque dur "bloquait" sur un endroit, sur la lecture d'un truc ou
j'sais pas quoi.... bref ça m'a bien foutu les boules.... alors j'me
demande, vu qu'en même temps ma partie de programme testée bugue ;) s'il y
avait une probabilité qu'un UB fasse ça..

le code qui serait la cause est une partie reception réseau allocation
mémoire (200ko max) + écriture sur disque avec fwrite.....

</>


Heu ... non, ce n'est pas dû à un UB. Les citations de mon idole ed sont
souvent des exagérations.

--
DINH V. Hoa,

"sunZ ! capitaine de soirées"

Avatar
Gabriel Dos Reis
"Nicolas aunai" @free.fr> writes:

| salut,
|
|
| j'ai souvent entendu parler, ici et ailleurs des 'UB' (Undefined
| Behavior...) en C... apparement là a cause de fautes de programmations ils
| sont des failles pas toujours perceptibles dans nos programmes, et peuvent
| faire.. "n'importe quoi" même ce qu'on veut...

y compris déclencher une troisième guerre mondiale ou faire sortir les
démons du nez du programmeur :-)

| je cite "C'est un bug, même si les apparences sont trompeuses. Le principal
| danger d'un UB, est qu'il ne provoque pas systématiquement de
| dysfonctionnement visible." (emmanuel D.)

c'est assez variable. Chez certains

| ainsi que : "De plus, vu du langage C, c'est 'comportement indéfini (UB),
| qui peut provoquer n'importe quel comportement, allant d'un comportement
| 'normal' (le pire, car on ne se rend compte de rien) au crash
| franc et massif avec destruction de données, reformatage du disque dur, ou
| largage de bombe sur Bagdad..." (Emmanuel D.)

ce que je trouve assez amusant, c'est que à chaque on se surprend à
vouloir définir un fonctionnement qu'on dit par ailleurs indéfini :-)
si le fonctionnement est indéfini alors comment peut-il être « normal » ?

| alors voila... suite à ça j'aimerai en savoir un peu plus sur ces UB, des UB
| graves comme des pertes de données a des endroits totalement différents de
| ceux sur lesquel le programme bosse etc... peuvent-il vraiment arriver ou
| est-ce "théoriquement possible" mais extremement rare ?

ah ça peut arriver vraiment dans la pratique. Un disk-crash avec
pertes de données suite à un déréférencement d'un pointeur nul n'est
pas si rare chez certains développeurs de noyaux par exemple.
Un programme mal compilé par un compilateur (qui a utilisé une
variable non-initialisée dans ses calculs) peut réserver des surprises.
Une collision entre un TGV et un véhicule à un passage à niveau peut
provenir d'un fonctionnement indéfini dans le programme qui pilote le
déclenchement des signaux.

Mais évidemment il y a fonctionnement indéfini et fonctionnement
indéfini. Si je fais #include <unistd.h>, du point de vue de la norme
j'ai un fonctionnement indéfini, mais je m'attends à un fonctionnement
bien plus précis.
Avatar
Pierre Maurette
"Nicolas aunai" @free.fr> a écrit dans le message de
news: 3f335654$0$26378$
salut,


j'ai souvent entendu parler, ici et ailleurs des 'UB' (Undefined
Behavior...) en C... apparement là a cause de fautes de programmations ils
sont des failles pas toujours perceptibles dans nos programmes, et peuvent
faire.. "n'importe quoi" même ce qu'on veut...

je cite "C'est un bug, même si les apparences sont trompeuses. Le
principal

danger d'un UB, est qu'il ne provoque pas systématiquement de
dysfonctionnement visible." (emmanuel D.)


Êtes-vous certain qu'il s'agit de "Undefined Behavior" ?
Je cite (ANSI C99) :
/*
3.4.4
1 unspecified behavior
behavior where this International Standard provides two or more
possibilities and
imposes no further requirements on which is chosen in any instance
2 EXAMPLE An example of unspecified behavior is the order in which the
arguments to a function are
evaluated.
*/
Le comportement est laissé à la discrétion de l'implémention, qui le
documentera (ou non ?).
Maintenant, face à un "unspecified behavior", si l'on ne se documente pas,
on en arrive fatalement à un "undefined behavior". Enfin, peut-être ...
Votre truc ressemble peut-être plus à un effet de bord (side effect).
De plus, ce que vous décrivez par la suite ne devrait pas être possible en
programmant au niveau "application", il en est de la responsabilité su
système d'exploitation.
Cordialement,
Pierre


ainsi que : "De plus, vu du langage C, c'est 'comportement indéfini (UB),
qui peut provoquer n'importe quel comportement, allant d'un comportement
'normal' (le pire, car on ne se rend compte de rien) au crash
franc et massif avec destruction de données, reformatage du disque dur, ou
largage de bombe sur Bagdad..." (Emmanuel D.)


alors voila... suite à ça j'aimerai en savoir un peu plus sur ces UB, des
UB

graves comme des pertes de données a des endroits totalement différents de
ceux sur lesquel le programme bosse etc... peuvent-il vraiment arriver ou
est-ce "théoriquement possible" mais extremement rare ?

dans quelles circonstances ?

vous ait-il déjà arrivé de planter complètement votre machine suite a un
UB

? quand je dis planter complètement c'est... boot failure quoi...

<HS perso = raison du post>
bon je vous demande ça parce que hier soir en testant un programme... j'ai
eu des bruits réguliers du coté de mon disque dur (tac tac tac...) et en
environ 15-20 secondes vraouuf écran gelé... 10sec plus tard vraaaouff
écran

bleu.... erreur grave etc... puis impossible de rebooter ... on aurait dit
que le disque dur "bloquait" sur un endroit, sur la lecture d'un truc ou
j'sais pas quoi.... bref ça m'a bien foutu les boules.... alors j'me
demande, vu qu'en même temps ma partie de programme testée bugue ;) s'il y
avait une probabilité qu'un UB fasse ça..

le code qui serait la cause est une partie reception réseau allocation
mémoire (200ko max) + écriture sur disque avec fwrite.....

</>

merci

ps : ça pourrait tout aussi bien être un virus ou un trojan sur mon
disque,

ou encore n'importe quoi d'autre bien sûr mais firewall + antivirus a jour
m'en font douter....


--
nico, qui sauvegarde son dd....
http://astrosurf.com/nicoastro
messenger : @hotmail.com