• STATISTIQUES
  • Il y a eu un total de 0 membres et 32310 visiteurs sur le site dans les dernières 24h pour un total de 32 310 personnes!
    Membres: 2 605
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Microcontest
    Cryptographie: 7, Mathématiques: 8, Image Son Vidéo: 5, Intelligence artificielle: 3, Réseau: 2, Divers: 7, Phy...
    Challenges
    [EN] Astalavista
    Un site aux ressources incontournable depuis plusieurs années, Astalavista est réellement devenue un cl...
    Hacking
    [FR] dcode
    dcode.fr est le site indispensable pour décoder des messages, tricher aux jeux de lettres, résoudre des énigmes...
    Outils / Add-on
    [FR] Le top web
    Nous offrons une sélection la plus large possible de resources webmaster gratuites, hébergement gratuit...
    Webmaster
    [FR] Developpez.net
    Un forum communautaire qui se veut pour les développeurs en générale. Avec presque 500 000 membr...
    Programmation
    [EN] CS Tutoring Center
    Site de challenge spécialisé dans les challenges de programmation C++ et java cependant, d'autres langages pe...
    Challenges
    [FR] Hackfest
    Le Hackfest est un évènement de sécurité et de piratage informatique au Québec reg...
    Hacking

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
fork bomb et overflow
25-01-2017, 22h33 (Modification du message : 25-01-2017, 22h34 par Commodor.)
Message : #1
Commodor Hors ligne
Ho ! Dodgson !
*



Messages : 64
Sujets : 9
Points: 36
Inscription : Nov 2011
fork bomb et overflow
Hello !

J'ai ouvert une discussion sur un forum de programmation suite à un comportement étrange dans un de mes programmes. Je viens vous en faire part ici (ça peut être assez intéressant et je pense que vous saurez m'éclairer d'avantage Smile )

En gros :
J'effectue des calculs parallèles en créant plusieurs processus fils (disons 4).
La création des process s'effectue dans une boucle et je stock leurs pid dans un tableau.
Les process appellent une fonction (compute()) puis quittent (exit(0)).

Code C :

int main(void)
{
      pid_t pid[4];
        ...
      for (i = 0; i < 4; i++) {
            pid[i] = fork();
            if (pid[i] == 0) {
                  compute(x, y, borne);
                  exit(0);
            }
     }
 
     while (wait(NULL) > 0);
     return 0;
}
 


À ce stade, aucun problème, le programme fonctionne bien. Puis j'ai voulu augmenter le nombre de process en modifiant la condition d'arrêt de la boucle (i < 6). Et forcément, j'ai oublié d'augmenter la taille du tableau Tongue (qui est restée à 4)...
Bref, segfault à l'exécution, rien d'étonnant. En revanche, j'ai continué à avoir des centaines et des centaines de process qui s'exécutaient (fork bomb).

Du coup j'aimerai un peu mieux comprendre d'où ils peuvent venir.
Le programme segfault après le fork du 5ème tour de boucle . J'ai donc 5 process zombies qui, après la fonction compute(), sont censés atteindre le exit(0), mais ce n'est visiblement pas le cas. (sauf peut être les 4 premiers)

Pour être plus précis, c'est le père qui segfault lors de l'accès à la case pid[4] pour y mettre le return du fork() (là je suis ok).
Mais du coup, le process fils (le 5ème donc), devrait normalement segfault aussi, puisque il évalue l'instruction :
if (pid[4] == 0)
Au lieu de ça, fork bomb.

Serait-t'il possible qu'il y ait un 'overflow' et que les instructions qui suivent le fork soient "écrasées" (jusqu'à la fonction exit(0)) Sleepy (comme lors d'un exploit de buffer overflow) ?

Vous avez sûrement fait déjà plus joujou avec ça que moi j'imagine Tongue
Hahaha you didn't say the magic word !
+1 (0) -1 (0) Répondre
26-01-2017, 21h12
Message : #2
Yttrium Hors ligne
Membre actif
*



Messages : 106
Sujets : 14
Points: 48
Inscription : Jul 2012
RE: fork bomb et overflow
Bonjour,

Je ne suis pas certain de comprendre toutes les questions, ni même d'avoir la réponse exacte, mais essayons tout de même Smile

Code :
pid_t pid[4];
si pid est de taille n et que i dépasse cette taille alors lors de l’exécution de la ligne
Code :
pid[i] = fork();
Le processus père segfault, mais le fork est lancé avant.
Alors lors de l’exécution de la condition.
Code :
if (pid[i] == 0)
pid[i] doit ne pas prendre correctement la valeur renvoyé par fork (vu que le tableau n'a pas la taille requise) ou quelque chose du genre, et donc le fork crée lui même un fork et ainsi de suite, fork bomb.
BufferoverfloW

Всё минется, одна правда останется
+1 (0) -1 (0) Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 2 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut