TacOS-team / tacos

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

Plantage de ls suite à un ctrl+c pour sortir de pres #135

Closed MaximeCheramy closed 12 years ago

MaximeCheramy commented 12 years ago

Bug reproductible par :

pres Ctrl+c ls

Si je tape une autre commande que ls ça ne plante pas (accès à une variable d'environnement ?). Et si je tape autre chose et que je relance ensuite la présentation et que je refais Ctrl+c suivi de ls, ça ne plante pas cette fois.

L'erreur :

In /tacos/bin/ls (pid:5)

Register dump: eax:0x40008a2c esp:0x335b1b20 ecx:0x40008a6c ebp:0x40008ac8 edx:0x4000c960 esi:0x00000001 ebx:0x0000001c edi:0x4000c12a

Exception handled : Page fault (error code : 6). Virtual address: 0x0d6cd7a0 Cause: Writing on a non-present page with CPL=3.

NicolasFloquet commented 12 years ago

L'esp a vraiment une drole de tronche, ça me fait peur cette histoire :D

MaximeCheramy commented 12 years ago

Le bug est assez magique. Visiblement ya un truc qui pourri les variables globales de ls lorsqu'on le lance. Pour confirmer cette hypothèse, j'ai rajouté une variable globale au tout début qui est un tableau de 400ko et là, plus aucun souci, ma variable globale suivante qui était initialisée à 0, le reste.

MaximeCheramy commented 12 years ago

Je ne sais pas si c'est lié mais suite à l'ajout de features dans mishell, j'obtiens cette erreur au retour de ls :

In /tacos/bin/mishell (pid:3)

Register dump: eax:0x40000b75 esp:0x40003ac8 ecx:0x00000002 ebp:0x40008bb2 edx:0x00000002 esi:0x00000044 ebx:0x00000002 edi:0x00000010

Exception handled : Page fault (error code : 4). Virtual address: 0x04000000 Cause: Read from a non-present page with CPL=3.

MaximeCheramy commented 12 years ago

Je confirme qu'un petit int tab[100000]; permet de contourner le plantage :D. J'ai bien sûr mis des XXX dans mishell à cet endroit...

MaximeCheramy commented 12 years ago

Est-ce qu'on peut fermer le ticket ou est-ce que tu penses que je n'ai pas rééllement corrigé le problème mais juste très bien dissimulé ? Les 2 plantages (mishell et ls après un pres) ont disparus suite au remplacement d'un malloc par un calloc sur les data du process elf.

MaximeCheramy commented 12 years ago

On a encore des plantages étranges si on lance plusieurs process en même temps à l'aide de getty. Il faudrait vérifier les adresses mémoires allouées.

MaximeCheramy commented 12 years ago

Je rajoute suite à notre discussion : La mémoire des processus n'est jamais libérée (sauf si on dit des erreurs) donc il n'y a pas de raison pour que la mémoire puisse être réutilisée par un autre process. Ici, avant de mettre le calloc, il y avait en mémoire les data de pres.

NicolasFloquet commented 12 years ago

A noter que les data de pres qu'on écrase avec le nouveau process ne sont pas dans le tas, mais bien dans la mémoire initiale du processus, qui a donc été normalement réservée par init_process_vm et non pas par un malloc( je sais pas trop ce qu'il y a derrière, mais le malloc est plus ou moins testé alors que cette fonction non, c'est donc surement une piste...)

MaximeCheramy commented 12 years ago

Est-ce que @NoWiS- pourrait nous expliquer un peu comment ça marche ?

MaximeCheramy commented 12 years ago

--- pres

Breakpoint 1, map (phys_page_addr=19415040, virt_page_addr=1073795072, u_s=1) Breakpoint 1, map (phys_page_addr=19410944, virt_page_addr=1073799168, u_s=1) Breakpoint 1, map (phys_page_addr=19406848, virt_page_addr=1073803264, u_s=1) Breakpoint 1, map (phys_page_addr=19402752, virt_page_addr=1073807360, u_s=1) Breakpoint 1, map (phys_page_addr=19398656, virt_page_addr=1073811456, u_s=1) Breakpoint 1, map (phys_page_addr=19394560, virt_page_addr=1073815552, u_s=1) Breakpoint 1, map (phys_page_addr=19390464, virt_page_addr=1073819648, u_s=1) Breakpoint 1, map (phys_page_addr=19386368, virt_page_addr=1073823744, u_s=1) Breakpoint 1, map (phys_page_addr=19382272, virt_page_addr=1073827840, u_s=1) Breakpoint 1, map (phys_page_addr=19378176, virt_page_addr=1073831936, u_s=1) Breakpoint 1, map (phys_page_addr=19374080, virt_page_addr=1073836032, u_s=1) Breakpoint 1, map (phys_page_addr=19369984, virt_page_addr=1073840128, u_s=1) Breakpoint 1, map (phys_page_addr=19365888, virt_page_addr=1073844224, u_s=1) Breakpoint 1, map (phys_page_addr=19361792, virt_page_addr=1073848320, u_s=1) Breakpoint 1, map (phys_page_addr=19357696, virt_page_addr=1073852416, u_s=1)

Breakpoint 1, map (phys_page_addr=19353600, virt_page_addr=1884160, u_s=0) Breakpoint 1, map (phys_page_addr=19349504, virt_page_addr=1888256, u_s=0) Breakpoint 1, map (phys_page_addr=19345408, virt_page_addr=1892352, u_s=0) Breakpoint 1, map (phys_page_addr=19341312, virt_page_addr=1896448, u_s=0) Breakpoint 1, map (phys_page_addr=19337216, virt_page_addr=1900544, u_s=0) Breakpoint 1, map (phys_page_addr=19333120, virt_page_addr=1904640, u_s=0) Breakpoint 1, map (phys_page_addr=19329024, virt_page_addr=1908736, u_s=0) Breakpoint 1, map (phys_page_addr=19324928, virt_page_addr=1912832, u_s=0) Breakpoint 1, map (phys_page_addr=19320832, virt_page_addr=1916928, u_s=0) Breakpoint 1, map (phys_page_addr=19316736, virt_page_addr=1921024, u_s=0) Breakpoint 1, map (phys_page_addr=19312640, virt_page_addr=1925120, u_s=0) Breakpoint 1, map (phys_page_addr=19308544, virt_page_addr=1929216, u_s=0) Breakpoint 1, map (phys_page_addr=19304448, virt_page_addr=1933312, u_s=0) Breakpoint 1, map (phys_page_addr=19300352, virt_page_addr=1937408, u_s=0) Breakpoint 1, map (phys_page_addr=19296256, virt_page_addr=1941504, u_s=0)

Breakpoint 1, map (phys_page_addr=19292160, virt_page_addr=1073741824, u_s=1) Breakpoint 1, map (phys_page_addr=19288064, virt_page_addr=4289724416, u_s=1) Breakpoint 1, map (phys_page_addr=19283968, virt_page_addr=4286586880, u_s=1) Breakpoint 1, map (phys_page_addr=19279872, virt_page_addr=1073745920, u_s=1) Breakpoint 1, map (phys_page_addr=19275776, virt_page_addr=1073750016, u_s=1) Breakpoint 1, map (phys_page_addr=19271680, virt_page_addr=1073754112, u_s=1) Breakpoint 1, map (phys_page_addr=19267584, virt_page_addr=1073758208, u_s=1) Breakpoint 1, map (phys_page_addr=19263488, virt_page_addr=1073762304, u_s=1) Breakpoint 1, map (phys_page_addr=19259392, virt_page_addr=1073766400, u_s=1) Breakpoint 1, map (phys_page_addr=19255296, virt_page_addr=1073770496, u_s=1) Breakpoint 1, map (phys_page_addr=19251200, virt_page_addr=1073774592, u_s=1) Breakpoint 1, map (phys_page_addr=19247104, virt_page_addr=1073778688, u_s=1) Breakpoint 1, map (phys_page_addr=19243008, virt_page_addr=1073782784, u_s=1) Breakpoint 1, map (phys_page_addr=19238912, virt_page_addr=1073786880, u_s=1) Breakpoint 1, map (phys_page_addr=19234816, virt_page_addr=1073790976, u_s=1) Breakpoint 1, map (phys_page_addr=19230720, virt_page_addr=1073795072, u_s=1) Breakpoint 1, map (phys_page_addr=19226624, virt_page_addr=1073799168, u_s=1) Breakpoint 1, map (phys_page_addr=19222528, virt_page_addr=1073803264, u_s=1) Breakpoint 1, map (phys_page_addr=19218432, virt_page_addr=1073807360, u_s=1) Breakpoint 1, map (phys_page_addr=19214336, virt_page_addr=1073811456, u_s=1) Breakpoint 1, map (phys_page_addr=19210240, virt_page_addr=1073815552, u_s=1) Breakpoint 1, map (phys_page_addr=19206144, virt_page_addr=1073819648, u_s=1) Breakpoint 1, map (phys_page_addr=19202048, virt_page_addr=1073823744, u_s=1) Breakpoint 1, map (phys_page_addr=19197952, virt_page_addr=1073827840, u_s=1) Breakpoint 1, map (phys_page_addr=19193856, virt_page_addr=1073831936, u_s=1) Breakpoint 1, map (phys_page_addr=19189760, virt_page_addr=1073836032, u_s=1)

--- ls

Breakpoint 1, map (phys_page_addr=19185664, virt_page_addr=1945600, u_s=0) Breakpoint 1, map (phys_page_addr=19181568, virt_page_addr=1949696, u_s=0) Breakpoint 1, map (phys_page_addr=19177472, virt_page_addr=1953792, u_s=0) Breakpoint 1, map (phys_page_addr=19173376, virt_page_addr=1957888, u_s=0) Breakpoint 1, map (phys_page_addr=19169280, virt_page_addr=1961984, u_s=0) Breakpoint 1, map (phys_page_addr=19165184, virt_page_addr=1966080, u_s=0) Breakpoint 1, map (phys_page_addr=19161088, virt_page_addr=1970176, u_s=0) Breakpoint 1, map (phys_page_addr=19156992, virt_page_addr=1073741824, u_s=1) Breakpoint 1, map (phys_page_addr=19152896, virt_page_addr=4289724416, u_s=1) Breakpoint 1, map (phys_page_addr=19148800, virt_page_addr=4286586880, u_s=1) Breakpoint 1, map (phys_page_addr=19144704, virt_page_addr=1073745920, u_s=1) Breakpoint 1, map (phys_page_addr=19140608, virt_page_addr=1073750016, u_s=1) Breakpoint 1, map (phys_page_addr=19136512, virt_page_addr=1073754112, u_s=1) Breakpoint 1, map (phys_page_addr=19132416, virt_page_addr=1073758208, u_s=1) Breakpoint 1, map (phys_page_addr=19128320, virt_page_addr=1073762304, u_s=1) Breakpoint 1, map (phys_page_addr=19124224, virt_page_addr=1073766400, u_s=1) Breakpoint 1, map (phys_page_addr=19120128, virt_page_addr=1073770496, u_s=1) Breakpoint 1, map (phys_page_addr=19116032, virt_page_addr=1073774592, u_s=1) Breakpoint 1, map (phys_page_addr=19111936, virt_page_addr=1073778688, u_s=1) Breakpoint 1, map (phys_page_addr=19107840, virt_page_addr=1073782784, u_s=1) Breakpoint 1, map (phys_page_addr=19103744, virt_page_addr=1073786880, u_s=1) Breakpoint 1, map (phys_page_addr=19099648, virt_page_addr=1073790976, u_s=1)

MaximeCheramy commented 12 years ago

Bon, je pense que le bug c'était vraiment juste le fait que les données n'étaient pas initialisées à 0 et que ça déconnait lorsqu'on réutilisait de la mémoire utilisée précédemment. Alors à la base on s'était dit qu'on ne libérait jamais les pages physiques donc c'est qu'il devait il y avoir un gros problème mais en fait, selon moi, les données sont celles allouées dans mishell, dans exec_elf. Ce serait ici que l'on réutiliserait de la mémoire.

Bref, je propose de fermer ce ticket et si jamais on a des bugs on peut rouvrir ou créer un nouveau ticket. Mais en tout cas maintenant je peux faire un ctrl+c dans pres pour faire un ls sans problème et depuis la console de mon choix.

NicolasFloquet commented 12 years ago

ouep ok