Resultats de ma recherche de la (les ?) segfaults ...

Damien Lucas nitrox at via.ecp.fr
Thu Apr 5 13:18:27 CEST 2001


On Thu, Apr 05, 2001, Laurent Rossier wrote:
> Bon je ne l'ai pas trouve (evidemment dirait nitrox !) mais j'ai trouve
> des trucs interressants qui pourraient vous aider (on ne sait jamais des
> fois que je serve a qqchose ...) Voici les logs de gdb qd ca segfault
> (en voici deux differents mais je pense que c'est la meme segfault non ?
> ...) :

T mortel !

> * Program received signal SIGSEGV, Segmentation fault.
> * SNMP_is_inited (zwitch=0x7972746e) at snmp/snmp.c:458
> * 458           if(z->machine>0xffffffffffff)

En fait, tu pourrais faire un 'print zwitch' dans gdb (à condition de compiler
sans optim. Parce que pour moi, la seg fault vient de zwitch.
A ce moment gdb te donne un dump hex de la memeoire à ce point ou bien un 
'cannot access memory'

> * Program received signal SIGSEGV, Segmentation fault.
> * 0x804d611 in SNMP_SW_callback (op=0, session=0x0, reqid=0, pdu=0x0,
> * zwitch=0x0) at snmp/callback.c:257
> * 257           (*zwitch->walk_macs.machine)->machine=(VS_MachineId)mac;

La c'est très clair, le pointeur zwitch est le pointeur NULL (0x0) donc
ca risue de segfaulter. C'est cette erreur qui est la plus embettante.
si pdu vaut NULL, ca veut dire que entre le moment ou le pacquet est arrvié
et le snmp_read dans if_snmp.c on doit pourrir la mémoire.

> Il se chie dessus dans SNMP_is_inited qd il fait le test avec la mac car
> la mac doit etre fausse - ne doit pas etre au bon format - et donc a la
> ligne 458 qd il la compare avec 0xffffffffffff et ben ca segfault ...
> Sinon le pb viendrait aussi de la mac mais en amont dans la fonction
> Callback_Macs() ou il remplit la table des macs qui serait
> completement fausse.
> M'enfin c'est ce que je pense ...

Je pense que c'est la struct zwitch toute entière qui est  en question.

> Puis en affichant les macs qu'il voit j'ai trouve une ligne super
> cheloud :
> 
> 05/04 10:22:09 [SNMP  : debug   ]  mac in callback 102afc3dc
> 05/04 10:22:09 [SNMP  : debug   ]  mac in callback 102dc0465
> 05/04 10:22:09 [SNMP  : debug   ]  mac in callback b4b7
> 05/04 10:22:09 [SNMP  : debug   ]  mac in callback 50044cb079
> 05/04 10:22:09 [SNMP  : debug   ]  mac in callback 50044cacdc

A vérifer:
Ou bien ce sont les switches qui sont capables de nbous envoyer des conneries.
Ou bien ces l'interprétation du pacquet qui chie
Ou bien on a pourri la mémoire entre les deux.
    (Tu as affiché quoi ?    le local unisgned int macs
                          ou la variable qu'on chope genre zwitch->....   ?  )


EN tout cas avec ce que tu asd trouvé on va pouvoir avancé plus vite.


-- 
nitrox 




More information about the vlcs-devel mailing list