1

Qu'est ce qu'une race condition? J'ai rencontré ce mot à propos de programmes multithreads mais

comment ça se manifeste?
qu'est ce que ça provoque?

me dites pas man, je voudrais une explication pour un mec qui découvre sans avoir fait de cours d'info théorique [moi quoi ^^], merci.

2

Bah quand meme un peu de man grin http://en.wikipedia.org/wiki/Race_condition

En gros, c'est une condition sur un temps d'exécution. Exemple, une faille qui repose sur une race condition, c'est une faille qui ne marchera que sur certaines machines qui tournent a une certaine vitesse, qui va faire que les temps d'éxécution bien particulier vont provoquer un condition particulière propice a exploiter la machine
Mon site perso : http://www.xwing.info

3

Race hazards may arise in software, especially when communicating between separate processes or threads of execution. For example, if one process writes to a file while another is reading from the same location then the data read may be the old contents, the new contents or some mixture of the two depending on the relative timing of the read and write operations.


ok c'est un conflit d'accès aux ressources quoi.

merci pour la page.

4

C'est un peu plus général que ça, puisque quand bien même les ressources seraient protégées pour qu'un seul processus y accède à la fois, selon l'ordre dans lequel les accès sont effectués le résultat peut changer...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

5

6

Comme bon exemple de race condition standard, imagine un programme qui ne s'execute pas avec tes droits qui ouvre un fichier qui t'appartient, dont tu passes le chemin vers ce fichier en parametre, et te permet de l'editer.

Un programme avec une race condition ferait ceci:
- Il verifie que le fichier t'appartient
- Il ouvre le fichier et te laisse l'editer

Le probleme c'est que entre le moment ou le processus verifie que le fichier t'appartient et le moment ou il l'ouvre, tu pourrais remplacer le fichier que t'as passé en parametre et dont il a deja verifie les droits par un lien symbolique pointant sur /etc/passwd (par exemple tongue).

Et un programme sans race condition ferait ceci:
- Il ouvre le fichier et recupere ainsi un descripteur de fichiers.
- Il verifie les droits associés a ce descripteur de fichier (proprietaire, droits, ...)

Le fait que pour le 1er cas, il faut exploiter la faille dans un laps tres court entre la verification et l'ouverture, la range dans la serie des race condition smile

Voilà
Vini, vidi, vici !

7

intéressant wink je me serais fait avoir sur ce coup!

8

bon dans le genre

j'ai un daemon qui écrit périodiquement un fichier, qui pourra être récupéré n'importe quand par php.

void write_php_code(void) {
	FILE *f;
	f=fopen("/var/cpulog/data.php", "w");
	if(!f) return;
	flock(fileno(f), LOCK_EX);
	fprintf(f, "<?PHP ?>\n");
	/*faire la suite*/
	flock(fileno(f), LOCK_UN);
	fclose(f);
	return;
}


je veux pas que apache puisse lire le fichier pendant qu'il est en train d'être écrit: flock fait ce que je veux?

9

Non, si le programme est interrompu entre fopen() et flock(), apache lira un PHP vide... Ce que tu peux faire, c'est passer par un fichier temporaire, puis faire un rename() qui, lui, va être atomique smile

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

10

11

chais pas, rtfm ^^ de toute façon si tu passes par rename t'en auras plus besoin...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

12