SimpleOS

SOSBugs

Navigation



  • Rechercher :

Site hébergé par : enix

Bugs de SOS


Merci d'envoyer tout rapport de bug à la mailing-list de SOS.

Articles 1 & 2


Bug potentiel dans strzcpy()
Si le paramètre len est nul (ou négatif), alors il y a débordement de buffer dans strzcpy().

Voici le patch qui corrige ce bug. Merci à Brice Arnould pour avoir remarqué le bug.
[Corrigé à partir de l'article 3]

Article 2


Erratum sur la figure 4 du Linux Mag 63
A gauche, il faut lire "cs ... gs" au lieu de "ecs ... egs".

Oubli d'indiquer l'exception faute double dans l'IDT
A propos de l'exception "faute double", nous écrivons :
Pour cette exception, nous définissons une routine de traitement particulière en assembleur, pas modifiable, et qui fait le maximum pour qu'aucune faute triple ne puisse avoir lieu
Bon, c'est bien beau, mais en plus de la définir cette exception, il faut l'indiquer dans l'IDT... Et ça nous avions oublié de le faire.

Voici le patch qui corrige cet oubli.
[Corrigé à partir de l'article 3]

Article 4


Erratum sur un exemple numérique
Dans l'exemple numérique portant sur l'adresse 0xA81100C, il y a erreur dans le texte et dans les figures. Il faut lire 0xa81800c et non pas 0xa811800c (erreur figure) ou 0xa81100c (erreur article). Dans ce cas, les valeurs 42, 24 et 12 pour les index de PD/PT et l'offset sont correctes.
[Corrigé dans la version en-ligne de l'article]

Article 5


Erreur dans lookup_range() de kmem_vmm.c (15/11/2004)
La fonction lookup_range() n'utilise pas les tables de traduction pour accélérer la récupération d'un range à partir d'une adresse virtuelle. Pire, si la page n'est pas mappée en RAM, la fonction plante lamentablement. Tout ceci parce que le test dans la fonction est incorrect et que la fonction sos_physmem_get_kmem_range() ne prend en parametre que des adresses alignées sur la taille d'une page. Un autre bug potentiel se cachait dans la fonction : on ne testait pas si l'adresse recherchée n'était pas en dehors du range le plus proche.

Voici le patch qui corrige cette erreur.
[Corrigé à partir de l'article 6]

Articles 1 à 5 inclus


Non conformité au standard multiboot (16/11/2004)
Le standard multiboot dit (entre autres) :
"load_addr must be less than or equal to header_addr."
Or dans sos ce n'était pas le cas. Merci à Nicolas Duboc pour sa relecture attentive !

Voici le patch qui corrige cette erreur.
[Corrigé à partir de l'article 6]

Article 6


Erratum article Linux Mag : En page 21, sur la figure 7, l'ordre des registres sauvegardés par le début de sos_cpu_kstate_switch en rose est incorrect. Il faut lire, du haut vers le bas : Eflags, CS, EIP, Error code et non Eflags, EIP, CS, Error code. La même erreur est présente sur la figure 11, page 24. Merci à Krys de nous avoir signalé le problème sur la liste SOS.

Erratum article Linux Mag : une erreur de mise en page a remplacé un bout de programme C par une commande hdparm en bas de la page 18. Le code C qui devait s'y trouver, et qui permet de comprendre le bout de code assembleur correspondant est le suivant :
int foo(int a, int b)
{
  int c;
  int t[12];
  c = a + b;
  return c;
}

int bar(int d)
{
  int e;
  e = d + 2;
  e = foo(e, 12);
  return e;
}


Article "6 et demi"


[Corrigés à partir de l'article 7]

Articles 1 à 7.5 inclus

Le noyau peut devenir assez gros, trop gros pour tenir sur une disquette. Voici un patch qui :
Pour debugger le noyau, utilisez gdb avec le fichier sos.elf. Pour naviguer dans le code assembleur des applis utilisateur, utilisez objdump avec les fichiers userland/myprogX. Leur variante avec l'extension .strip (sos.elf.strip et userland/myprogX.strip) correspond à la version sans les symboles.

Merci à Cyril Dupuit et à s[e]th & h[o]lth pour nous avoir signalé ce bug apparaissant sur Mandriva 10 et Gentoo.
[Intégré dans la mise à jour disponible au SOSDownload ]
[Corrigé à partir de l'article 8]

Article 7.5

Sous bochs, il se peut que les applications utilisateur ne se lancent jamais. Cela vient du fait que l'ordonnanceur avec partage de temps ne fonctionnait pas convenablement a cause d'une incoherence entre les structures de donnees (utilisation d'unions) et les fonctions qui les utilisaient. Ce bug existe aussi sur qemu et sur machines réelles mais n'est pas visible parce qu'elles sont plus rapides que bochs.

Appliquez ce patch pour corriger ce problème. Update: ajouter -O a la fin de la définition de la variable CFLAGS dans Makefile et userland/Makefile. Une autre solution est de changer la valeur de la variable de configuration ibs de bochs (mettre 600000).
[Intégré dans la mise à jour disponible au SOSDownload ]
[Corrigé à partir de l'article 8]

Article 7.5

Des ecrasements de données ou des violations d'assertions sur les compteurs de références des pages physiques peuvent se produire. Cela est dû à une gestion incorrecte des pages physiques dans le "driver" zero qui permet de mapper des pages vides à la demande, avec partage. Appliquer ce patch pour corriger le problème.
[Intégré dans la mise à jour disponible au SOSDownload ]
[Corrigé à partir de l'article 8]

Articles 1 à 7.5

Le script qui fabrique la disquette de boot en utilisant Grub (support/build_image.sh) ne détermine pas correctement l'emplacement de Grub sur certains systèmes Linux. Karim Dridi propose ce patch pour régler le problème.
[Corrigé à partir de l'article 8]

Articles 2 à 8

Lors de l'initialisation du registre gdtr, on fournissait une structure qui n'était pas correctement alignée en mémoire. Ce patch corrige le problème et un autre : certains champs de la GDT n'étaient pas explicitement positionnés à 0 (le compilateur, gcc s'en charge par défaut). Merci à Romain de nous avoir signalé ces problèmes. Update : le patch contourne également un bug des binutils 2.16.
[Corrigé à partir de l'article 9]

Articles 1 à 8

Vous allez rencontrer des problèmes pour compiler SOS dans un répertoire contenant des espaces et/ou des caractères bizarres (dollars, apostrophe) du genre /tmp/Quë lâ vîe êst b€lle avec $ôs/l'article 8
Voici le patch (article 8) qui corrige ce problème.
[Corrigé à partir de l'article 9]

Articles 6.5 à 9

Il y a une erreur dans sos/ksynch.c qui fera que mutex_lock peut échouer intempestivement. Voici le patch qui corrige ce problème.