Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • yassine.ettayeb/anastat-frama-c-24-25
  • nicolas.descamps/anastat
  • stanislas.plowiecki/anastat-frama-c-24-25
  • thomas.norodom/norodom-ana-stat-frama-c-24-25
  • quentin.vicens/ana-stat-frama-c-24-25
  • rayan.lachguel/anastat-frama-c-24-25
  • virgile.prevosto/anastat-frama-c-24-25
  • merlin.baviere/ana-stat-frama-c-24-25-merlin-baviere
8 results
Select Git revision
Show changes
Commits on Source (1)
File added
# Rapport
## CERT C EXP33-C. Do not read uninitialized memory
### Question 1
Les messages émis sont 'normaux', sachant que sign vaut -1, 1 ou UNINITIALIZED et que la valeur de retour de la fonction est 0 ou 1 (booléen).
Le problème du CERT est identifiable grâce à la possibilité d'avoir un sign UNINITIALIZED.
### Question 2
Il n'y a pas de Red Alarm.
Pour le second 'if' de 'set_flag', la valeur de number est dans l'intervalle [-INT_MIN..0], ce qui correspond bien au faite qu'il est dans le 'else' de la condition de 'number > 0'.
### Question 3
Le Frama_C_show_each_set_flag affiche '[-INT_MIN..INT_MAX], {-1;1}'
Le Frama_C_show_each_is_negative affiche '[-INT_MIN..INT_MAX], {-1;1}'
On voit que le UNINITIALIZED n'est plus pris en compte dans les lignes suivantes, Eva considère que sign vaut 1 ou -1.
### Question 4
Avec '-eva-partition-history 2', Frama_C_show_each_set_flag affiche maintenant trois cas différents :
Frama_C_show_each_set_flag : {0}, Bottom
Frama_C_show_each_set_flag : [-INT_MIN..-1], {-1}
Frama_C_show_each_set_flag : [1..INT_MAX], {1}
On voit que Eva garde en mémoire plusieurs chemins d'exécution et 'relit' les valeurs de number et de sign en fonction des cas.
### Question 5
On voit avec l'option '-eva-interprocedural-history' que l'analyse lève une erreur : '1 access to uninitialized left-values'.
En effet, dans le scope de la fonction 'set_flag', la valeur de sign peut être non initialisé et si on garde cette information en revenant de la fonction, on accède à cette variable non initialisé dans le return, ce qui déclance l'alarme rouge.
### Question 6
En mettant 'number >= 0' dans la première condition de 'set_flag', on va initialiser la valeur de 'sign' dans tous les cas.
En effet, l'exécution d'Eva ne déclenche plus d'alarme après cette modification.
## CERT C EXP33-C bis
### Question 7
Dans l'exécution du ficher 'cert_exp_33_realloc.c', Eva déclenche 2 erreur :
- 1 access to uninitialized left-values
- 1 escaping address
Celle qui correspond à la lecture d'une location mémoire non-initialisée est la première : access to uninitialized left-values.
### Question 8
Avec une option de '-eva-slevel 3', nous n'avons plus qu'une erreur : 1 access to uninitialized left-values. En effet, les problèmes où resize_array rate et renvoie 0 sont attrapé apr le handle error.
Eva se 'souvient' que l'array est alloué si et seulement si resize_array retourne quelque chose de non nul.
Maintenant qu'Eva est sûr que les print du tableau tapent dans un emplacement alloué, la seule erreur qu'il reste est que cette emplacement n'est pas initialisé.
### Question 9
Avec la correction, il n'y a plus d'erreur détecté par Eva (le nouveau tableau a bien été initialisé)
## CWE 20
### Question 10
Frama-C/Eva est plutôt critique du code... 8 alarmes sont déclenchées :
- 5 integer overflows
- 2 invalid memory accesses
- 1 access to uninitialized left-values
### Question 11
Les modifications proposées ne permettent pas de supprimer toutes les erreurs. Elles suppriment les 5 erreurs integer overflows mais pas les accès invalid et la non-initialisation.
### Question 12
Grâce à la directive de split, on a plus les accès invalides à la mémoire
## libstring
### Question 13
Il n'y a bien aucune erreur dans l'exécution avec la librairie libstring.
File moved
File moved
File moved
File moved
File moved
File moved
File moved
File moved
File moved
File moved