TacOS-team / tacos

Système d'exploitation / Operating System
GNU General Public License v3.0
9 stars 4 forks source link

Plantage de test_io au second lancement #205

Closed MaximeCheramy closed 9 years ago

MaximeCheramy commented 9 years ago

Il y a visiblement une regression suite à mes modifs au niveau du VFS. Cela plante dans le chargement des symboles ELF :

            while(!found && i < file->elf_header->e_shnum)
            {
                if(strcmp(debug_string_sname, get_string(file, file->sheaders[i].sh_name)) == 0)
                    found = 1;
                i++;
            }

Ici, file->sheaders[i].sh_name prend une grosse valeur qui provoque un buffer overflow.

MaximeCheramy commented 9 years ago

Je suis en train d'enquêter. La lecture de l'ELF essaye de lire exactement au même endroit sur la disquette (bon signe) sauf que la seconde fois il lit pleins d'octets 0xff sans raison. J'imagine que le code bas niveau de la disquette commence à être robuste donc je pense que test_io se pourri tout seul et donc la seconde fois il fait n'importe quoi.

MaximeCheramy commented 9 years ago

La fonction alloc_block retourne la première fois le block utilisé par test_io et donc il se fait écrire dessus lors de la création d'un dossier par exemple (ou un lien symbolique assez grand pour taper sur l'ELF). Je soupçonne donc un vieux bug pour le moment. Le code n'est pas trivial à débugguer par contre (manipulation de bits).

MaximeCheramy commented 9 years ago

Il faudrait intensifier un peu les tests unitaires pour s'assurer que tout est ok. Ma correction est simplement un +1 ajouté. Ce qui me rassure c'est que la gestion des blocks est similaire à celle des inodes et que pour les inodes j'avais bien fait le +1.