OVH Cloud OVH Cloud

Faille critique découverte dans GLIBC

38 réponses
Avatar
JUPIN Alain
Bonjour,

Je ne l'ai pas vu ici sur la liste (ou alors je n'ai pas les yeux en
face des trous)

Une faille critique permettant d'avoir les droits administrateur (root)
a été découverte sur les systèmes Linux. La faille est présente dans
toutes les versions inférieure à 2.18 de GLIBC (paquet libc6 pour nous
autres chez Debian).

Pour Debian (ainsi que Ubuntu et RedHat) le correctif est sorti.
Vous connaissez la marche a suivre je suppose ;)

Source :
http://www.01net.com/editorial/643126/ghost-la-faille-critique-qui-permet-de-prendre-le-controle-des-systemes-linux/

--
Alain JUPIN

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: https://lists.debian.org/54C88BD1.9040406@jupin.net

10 réponses

1 2 3 4
Avatar
mrr
On 28/01/2015 15:00, Sébastien NOBILI wrote:
Bonjour,

Le mercredi 28 janvier 2015 à 14:43, Francois Lafont a écrit :
Le 28/01/2015 14:34, Francois Lafont a écrit :
echo "deb http://http.debian.net/debian/ squeeze-lts main contrib non-free" > /etc/apt/sources.list.d/squeeze-lts.list
apt-get update
apt-get upgrade



Ah, au fait, petite question. Après les commandes ci-dessus,
faut-il que je fasse un reboot ?

Si j'ai bien compris, si un daemon dépend d'une lib, il faut
redémarrer le-dit daemon après la mise à jour de la-dite lib.
Seulement j'ai cru comprendre que globalement, quasiment tous
les daemons (sous Debian) dépendent in fine de la glibc et
qu'au final un reboot est globalement nécessaire. Bref, j'ai
lu je ne sais plus où que l'idée selon laquelle seule la
màj du noyau nécessitait un reboot était inexacte et que le
reboot était également nécessaire pour la màj de la glic.

Bref, ce serait possible d'avoir un avis d'expert sur la question ? ;)
Merci d'avance.



Loin de moi l'idée de me considérer comme tel…




moi non plus mais je voudrais nuancer ta réponse (car en pratique c'est
clair qu'un reboot est juste simple et efficace mais: )

- La mise à jour de la glibc se contente peut-être de patcher quelques
fichiers (diff), dans ce cas ce sont les programmes/daemons qui les
utilisent qui auront besoin de la nouvelle version bien sûr. Peut-être
aussi (pour ceux qui ne peuvent pas rebooter leur machine et il y en a,
un simple logout/login) peut peut-être légèrement aider

- La libc fourni une librairie (minimale) pour les programmes écrits en
C, donc ton démon écrit dans un autre langage ne devrait pas être touché
cependant:

- Linux est écrit en C (bravo les gars au passage!), tous les appels
systèmes ont été implémenté en C et en assembleur (qd c'était obligé,
les registres par exemple ne sont pas directement accessibles en C, ou
pour des raisons de performance) et:

Certains appels systèmes en sont des vrais (par exemple fork je crois)
mais d'autres ont des wrappers (désolé, je trouve pas la traduction là)
autour ex:

Des "appels systèmes" wait, waitpid, wait3, wait4 qui font tous à peu
près la même chose (attendre (ou non) la fin d'un fils (présicément
celui-là ou non)...) seul wait3 est réellement un appel système, les
autres se contentant de l'appeler avec les bonnes options. Et je crois
que ces wrappers (et d'autres trucs) dépendent de la libc. A moins
qu'ils fassent également parti du noyau en fait.

Bon là je me perd et je dois partir bosser, toute correction à mes
propos appréciée, je ne prétend pas à la vérité, c'est juste un point de
vue.

Ceci étant dit, bonne journée les gars!

Il y a justement une discussion à ce sujet en ce moment sur debian-security [1].
Tous les programmes qui utilisent de la bibliothèque mise à jour doivent être
redémarrés. On doit donc redémarrer les services qui l'utilisent.

Dans le cas de la libc, ça devient problématique car _tous_ les programmes du
système l'utilisent. Il faut donc redémarrer _tous_ les programmes actuellement
en fonctionnement.

Deux approches :
- tu les identifies un par un et tu les redémarres un par un (et tu ne fais
rien d'autre de ta journée);
- tu rebootes et c'est réglé en quelques minutes.

1: https://lists.debian.org/debian-security/2015/01/msg00035.html

Seb





--
--
mrr

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: https://lists.debian.org/54c9d852$0$3081$
Avatar
Vincent Lefevre
On 2015-01-28 23:16:48 +0100, Bernard Isambert wrote:
Le 28/01/2015 20:59, Philippe Deleval a écrit :
>C'est une blague? A mon avis, tout programmeur utilisant la fonction de
>bibliothèque C char *strcpy (s, ct) devrait être renvoyé de la boîte où
>il travaille pour faute grave! Il y a à côté strncpy(char *strncpy (s,
>ct, n), le petit n fait la différence.

Et ceux qui créé la fonction strcpy sont des criminels qui devraient être
guillotinés sur le champ. Heureusement, Zorro est arrivé et a sauvé
l'informatique...



Faut voir l'historique: strcpy date de l'origine du langage C,
à un temps où on ne se préoccupait pas trop des problèmes de
sécurité.

Maintenant, la fonction strcpy devrait peut-être prendre le même
chemin que gets.

--
Vincent Lefèvre - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: https://lists.debian.org/
Avatar
Vincent Lefevre
On 2015-01-28 20:59:50 +0100, Philippe Deleval wrote:
C'est une blague? A mon avis, tout programmeur utilisant la fonction de
bibliothèque C char *strcpy (s, ct) devrait être renvoyé de la boîte où il
travaille pour faute grave! Il y a à côté strncpy(char *strncpy (s, ct, n),
le petit n fait la différence.



Enfin, strncpy n'est pas vraiment safe non plus. Un problème est
que si le n est trop petit, le buffer n'est plus forcément terminé
par un , ce qui peut être en soi un trou de sécurité: si on
copie la chaîne contenue dans le buffer, cela peut donc copier
des données au-delà du buffer, et on se retrouve donc avec des
bugs du type heartbleed. La vraie solution est d'avoir une fonction
qui fait un abort() quand le n est trop petit... et si le serveur
est critique, on n'écrit pas en C.

--
Vincent Lefèvre - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: https://lists.debian.org/
Avatar
mrr
Ah, au fait, petite question. Après les commandes ci-dessus,
faut-il que je fasse un reboot ?





J'ajouterais, dans un souci d'échange et de discussion, que le reboot ne
me semble pas si important que cela (aie, je prend un risque en disant
cela), pourquoi?
Les fichiers qui correspondent aux processus exécutés sur un système
Linux sont protégés en écriture, petit rappel:
$ cat >> read_bloquant.c << FIN

# include <stdio.h>

int main (void)
{
read (0, NULL, sizeof(int));

/* En gros on exécute un appel système bloquant, on lit depuis l'entrée
standard, en général la console, NULL parce qu'on s'en fout du résultat
et le sizeof parce que ça fait plus cool qu'un 4 ou un 8 (et portable).
Donc tant qu'on n'entre pas un caractère (dac, un nombre (cela dit,
c'est du C, c'est pareil pour "lui", chez moi il en mange 4 donc int = 4
octets, moins si caractère en dehors ascii et si console en UTF-8 par
ex) et qu'on n'appuie pas sur Entrée le programme attend */

exit (0);
}

FIN

Désolé si ça fait un peu cours et pour tout ceux qui savent déjà tout ça!
Donc on compile et on exécute:

$ gcc read_bloquant.c -o read_bloquant
$ ./read_bloquant

Ça y est, le processus attend.
Sur une autre console :

$ kate read_bloquant
(ou gedit, mousepad etc.)

Impossible de sauvegarder les modifs (on peut avec vim, allez savoir!).
Et possible lorsque le programme n'est pas exécuté.

Lorsque j'ai mis à jour la libc sur ma wheezy je n'ai pas eu de souci
particulier, virtualbox (qui n'était pas en exécution) s'est recompilé
son module, 2-3 petits trucs et c'était bon.
Ce que j'en conclus, c'est que sur mon système la mise à jour n'a
remplacé aucun fichier en cours d'utilisation donc que le reboot n'est
peut-être pas indispensable.


Toutefois, juste pour être sûr et si j'étais admin je viderais tout ce
qui est buffer/cache avant la mise à jour et également après tant qu'à
faire:
# echo 3 > /proc/sys/vm/drop_caches

Et si ça swappe (c'est pas dit avec tout ces ordi à 8+ Gb de ram), je
tuerais quelque processus après avoir exécuté:
# echo 0 > /proc/sys/vm/swappiness

Attention tout de même à ne pas exécuter cela sur un pc avec très peu de
mémoire mais de toute façon je suis même pas sûr que cette dernière
ligne aurait de l'effet dans ce cas.

Une dernière chose:
Un programme peut être lié à une ABI de la libc de façon statique ou
dynamique.

Si c'est dynamique comme l'appel à read ci-dessus (on peux voir entre
autres grâce à strace que c'est /lib/i386-linux-gnu/i686/cmov/libc.so.6
qui est appelé chez moi), aucun problème tant que le programme utilise
un cache bien mis à jour (ce qui est normalement le cas mais c'est t'on
jamais d'où les 2 dernières commandes).

Si c'est statique (avec la libc ce doit être rare voire inexistant, j'ai
pas vérifié), alors là un reboot n'y fera rien, il faudra recompiler le
paquet, c'est d'ailleurs un des principaux désavantage des librairies
statiques (avec la quantité d'espace mémoire utilisée, l'avantage étant
un programme très légèrement plus rapide).

Voilà pour mes petites réflexion, s'il y a des erreurs de logique merci
de me corriger.

Cordialement/Bises...

--
mrr

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: https://lists.debian.org/54ca32ea$0$3190$
Avatar
Dominique Asselineau
mrr wrote on Thu, Jan 29, 2015 at 02:17:32PM +0100
>>Ah, au fait, petite question. Après les commandes ci-dessus,
>>faut-il que je fasse un reboot ?

J'ajouterais, dans un souci d'échange et de discussion, que le
reboot ne me semble pas si important que cela (aie, je prend un
risque en disant cela), pourquoi?



Il faut juste penser à prévenir les utilisateurs suffisamment à
l'avance pour éviter de leur casser la baraque.

Dominique

Les fichiers qui correspondent aux processus exécutés sur un système
Linux sont protégés en écriture, petit rappel:
$ cat >> read_bloquant.c << FIN

# include <stdio.h>

int main (void)
{
read (0, NULL, sizeof(int));

/* En gros on exécute un appel système bloquant, on lit depuis
l'entrée standard, en général la console, NULL parce qu'on s'en fout
du résultat et le sizeof parce que ça fait plus cool qu'un 4 ou un 8
(et portable). Donc tant qu'on n'entre pas un caractère (dac, un
nombre (cela dit, c'est du C, c'est pareil pour "lui", chez moi il
en mange 4 donc int = 4 octets, moins si caractère en dehors ascii
et si console en UTF-8 par ex) et qu'on n'appuie pas sur Entrée le
programme attend */

exit (0);
}

FIN

Désolé si ça fait un peu cours et pour tout ceux qui savent déjà tout ça!
Donc on compile et on exécute:

$ gcc read_bloquant.c -o read_bloquant
$ ./read_bloquant

Ça y est, le processus attend.
Sur une autre console :

$ kate read_bloquant
(ou gedit, mousepad etc.)

Impossible de sauvegarder les modifs (on peut avec vim, allez savoir!).
Et possible lorsque le programme n'est pas exécuté.

Lorsque j'ai mis à jour la libc sur ma wheezy je n'ai pas eu de
souci particulier, virtualbox (qui n'était pas en exécution) s'est
recompilé son module, 2-3 petits trucs et c'était bon.
Ce que j'en conclus, c'est que sur mon système la mise à jour n'a
remplacé aucun fichier en cours d'utilisation donc que le reboot
n'est peut-être pas indispensable.


Toutefois, juste pour être sûr et si j'étais admin je viderais tout
ce qui est buffer/cache avant la mise à jour et également après tant
qu'à faire:
# echo 3 > /proc/sys/vm/drop_caches

Et si ça swappe (c'est pas dit avec tout ces ordi à 8+ Gb de ram),
je tuerais quelque processus après avoir exécuté:
# echo 0 > /proc/sys/vm/swappiness

Attention tout de même à ne pas exécuter cela sur un pc avec très
peu de mémoire mais de toute façon je suis même pas sûr que cette
dernière ligne aurait de l'effet dans ce cas.

Une dernière chose:
Un programme peut être lié à une ABI de la libc de façon statique ou
dynamique.

Si c'est dynamique comme l'appel à read ci-dessus (on peux voir
entre autres grâce à strace que c'est
/lib/i386-linux-gnu/i686/cmov/libc.so.6 qui est appelé chez moi),
aucun problème tant que le programme utilise un cache bien mis à
jour (ce qui est normalement le cas mais c'est t'on jamais d'où les
2 dernières commandes).

Si c'est statique (avec la libc ce doit être rare voire inexistant,
j'ai pas vérifié), alors là un reboot n'y fera rien, il faudra
recompiler le paquet, c'est d'ailleurs un des principaux désavantage
des librairies statiques (avec la quantité d'espace mémoire
utilisée, l'avantage étant un programme très légèrement plus
rapide).

Voilà pour mes petites réflexion, s'il y a des erreurs de logique
merci de me corriger.

Cordialement/Bises...

--
mrr

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: https://lists.debian.org/54ca32ea$0$3190$




--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: https://lists.debian.org/
Avatar
Sébastien NOBILI
Bonjour,

J'ai bien aimé le passage en C, ça m'a rappelé de (trop) vieux souvenirs ;-)


Le jeudi 29 janvier 2015 à 14:17, mrr a écrit :
Un programme peut être lié à une ABI de la libc de façon statique ou
dynamique.

Si c'est dynamique comme l'appel à read ci-dessus (on peux voir entre autres
grâce à strace que c'est /lib/i386-linux-gnu/i686/cmov/libc.so.6 qui est
appelé chez moi), aucun problème tant que le programme utilise un cache bien
mis à jour (ce qui est normalement le cas mais c'est t'on jamais d'où les 2
dernières commandes).



Dans ce cas, il me semble (et je peux donc me tromper, dans ce cas, il faudra me
corriger) que la bibliothèque dynamique est chargée au démarrage du programme.
Chacun des appels système sera donc fait selon la version installée à ce
moment-là. Si on met à jour la bibliothèque en cours d'exécution, le programme
ne profitera donc pas des corrections.

Si c'est statique (avec la libc ce doit être rare voire inexistant, j'ai pas
vérifié), alors là un reboot n'y fera rien, il faudra recompiler le paquet,
c'est d'ailleurs un des principaux désavantage des librairies statiques
(avec la quantité d'espace mémoire utilisée, l'avantage étant un programme
très légèrement plus rapide).



Oui, pour les liens statiques, aucun impact sans passer par une recompilation.
C'est donc hors-champ.

Un autre avantage des liens statiques, c'est le coté transportable du binaire,
tu peux le lancer sur une machine qui ne dispose pas de toutes les bibliothèques
nécessaires (puisque le programme « embarque » tous les bouts de bibliothèques
dont il a besoin).

Seb

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: https://lists.debian.org/
Avatar
andre_debian
On Thursday 29 January 2015 14:17:32 mrr wrote:
>> Ah, au fait, petite question. Après les commandes ci-dessus,
>> faut-il que je fasse un reboot ?

J'ajouterais, dans un souci d'échange et de discussion, que le reboo t ne
me semble pas si important que cela (aie, je prend un risque en disant
cela), pourquoi?
Les fichiers qui correspondent aux processus exécutés sur un sy stème
Linux sont protégés en écriture, petit rappel: .... [cut]



Sous Wheezy, j'avais bien updaté glibc6,
recompilé "ghosttest.c" et avais : "Vulnerable"

J'ai fait un reboot => "Not vulnerable".

André

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: https://lists.debian.org/
Avatar
Philippe Deleval
Le 28/01/2015 23:16, Bernard Isambert a écrit :
Le 28/01/2015 20:59, Philippe Deleval a écrit :
Bonjour à tous

C'est une blague? A mon avis, tout programmeur utilisant la fonction de
bibliothèque C char *strcpy (s, ct) devrait être renvoyé de la boîte où
il travaille pour faute grave! Il y a à côté strncpy(char *strncpy (s,
ct, n), le petit n fait la différence.

Cordialement


Philippe Deleval



Et ceux qui créé la fonction strcpy sont des criminels qui devraient
être guillotinés sur le champ. Heureusement, Zorro est arrivé et a
sauvé l'informatique...



Ceux qui ont créé strcpy n'étaient sans doute pas conscients que le
système qu'ils écrivaient et le langage qu'ils concevaient auraient une
telle fortune, avaient-ils prévu Internet? Après tout, ma source sur C
est signée Kernighan-Ritchie. C'est l'expérience qui a dégagé ce qui
était plus ou moins bon. strcpy peut encore être utilisé sans danger par
un programmeur qui sait ce qu'il fait et maîtrise la longiueur des
chaînes qu'il manipule, je pnese que c'était la vocation première. Mais
lire par strcpy une chaîne qui vient d'ailleurs, c'est un risque notoire!

Cordialement

Philippe Deleval (et non zorro, je ne sais pas monter à cheval!)

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: https://lists.debian.org/
Avatar
mrr
Salut Seb,

Si c'est dynamique comme l'appel à read ci-dessus (on peux voir entre autres
grâce à strace que c'est /lib/i386-linux-gnu/i686/cmov/libc.so.6 qui est
appelé chez moi), aucun problème tant que le programme utilise un cache bien
mis à jour (ce qui est normalement le cas mais c'est t'on jamais d'où les 2
dernières commandes).





Oups, ça c'est de l'erreur de syntaxe (de logique aussi si on veut):

s/c'est/sait


Dans ce cas, il me semble (et je peux donc me tromper, dans ce cas, il faudra me
corriger) que la bibliothèque dynamique est chargée au démarrage du programme.
Chacun des appels système sera donc fait selon la version installée à ce
moment-là. Si on met à jour la bibliothèque en cours d'exécution, le programme
ne profitera donc pas des corrections.



Je vois, au 1er appel la librairie serait mappée en mémoire puis en
quelque sorte détachée de sa source, à savoir le fichier sur le disque.
Tu dois avoir raison, cela aurait également le mérite d'expliquer ma
1ère remarque, l'accès en écriture sur un fichier en cours d'exécution
(bon, processus, dac mais on se comprend).
Et ça expliquerait aussi le résultat d'André (message suivant).

Par contre, ce qui me gène un peu c'est que cela signifierait que chaque
processus en cours d'exécution aurait sa propre copie en mémoire.

Ou il y a une autre possibilité de comprendre ta phrase qui me convient
mieux, c'est qu'à chaque fois qu'une bibliothèque partagée est appelée
pour la *1ère* fois, elle serait mappée dans l'espace virtuel pour tout
le monde jusqu'à ce qu'il n'y ait plus aucun processus qui l'utilise et
alors elle serait "déchargée".

De toute façon je vais essayer genre pour le fun =>
- créer un .so qui affiche "Version initiale".
- lancer un programme qui appelle .so puis qui se bloque.
- modifier le .so pour qu'il affiche "Version modifiée".
- reprendre l'exécution.
Et tant qu'à faire, lancer le programme 2 fois, avant et après modif.

Si je fais ça rapidement je vous poste le résultat.

Au passage, si quelqu'un pouvait m'expliquer le comportement de vim (en
une phrase, je sais que c'est pas le sujet initial)?

Si c'est statique (avec la libc ce doit être rare voire inexistant, j'ai pas
vérifié), alors là un reboot n'y fera rien, il faudra recompiler le paquet,
c'est d'ailleurs un des principaux désavantage des librairies statiques
(avec la quantité d'espace mémoire utilisée, l'avantage étant un programme
très légèrement plus rapide).



Oui, pour les liens statiques, aucun impact sans passer par une recompilation.
C'est donc hors-champ.

Un autre avantage des liens statiques, c'est le coté transportable du binaire,
tu peux le lancer sur une machine qui ne dispose pas de toutes les bibliothèques
nécessaires (puisque le programme « embarque » tous les bouts de bibliothèques
dont il a besoin).



Exact, bien vu!
Je crois au passage que c'est bien plus utilisé sur Windows, ça règle
les problèmes de versions et on sait vraiment avec quoi on travaille.
Linux est plus ambitieux mais parallèlement (et on en parlait récemment
sur un autre thread) cela augmente la complexité du système de dépendances.

Seb




@ Sébastien (message précédent, je vais pas alourdir le fil de 3
messages juste pour ça): je crois avoir bien précisé que je n'étais pas
sûr de moi et à aucun moment j'ai déconseillé le reboot (qui est
manifestement utile d'après les réponses des uns et des autres).

Update:

- En réfléchissant aux autres librairies que fournit la glibc j'ai
oublié de penser que c'est elle même qui fournit le chargeur de lien
dynamique (via /lib/i386-linux-gnu/ld-2.13.so sur mon système) qui est
lui même un objet partagé. Bon, même combat, il faut bien d'une façon ou
d'une autre que le nouveau entre en action. Et d'une façon ou d'une
autre c'est l'ancien qui charge le nouveau afin que ce dernier l'écrase.
Ouais, du coup, _reboot_ ça me parle plus là.

- De la page man de ld.so et à la section BOGUES:
"Actuellement, ld.so ne peut pas enlever un lien existant pour chercher
des bibliothèques compatibles ou plus récentes."
Ça revient à ce que tu disais Seb.

Allez, bonne nuit tout le monde.

--
mrr

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: https://lists.debian.org/54ca99a9$0$3295$
Avatar
Pascal Hambourg
mrr a écrit :

Dans ce cas, il me semble (et je peux donc me tromper, dans ce cas, il faudra me
corriger) que la bibliothèque dynamique est chargée au démarrage du programme.
Chacun des appels système sera donc fait selon la version installée à ce
moment-là. Si on met à jour la bibliothèque en cours d'exécution, le programme
ne profitera donc pas des corrections.





Et c'est bien pour cela qu'il faut redémarrer les processus utilisant un
exécutable (bibliothèque ou autre) mis à jour.

Je vois, au 1er appel la librairie serait mappée en mémoire puis en



Oui.

quelque sorte détachée de sa source, à savoir le fichier sur le disque.



Non, elle reste liée au fichier. C'est le principe du mapping. Même
chose pour l'exécutable d'un programme qui tourne.

Par contre, ce qui me gène un peu c'est que cela signifierait que chaque
processus en cours d'exécution aurait sa propre copie en mémoire.



Non, pas forcément, tant que la copie n'est pas modifiée. Ensuite seules
les pages éventuellement modifiées par un processus font l'objet d'une
copie séparée dans la mémoire virtuelle de ce processus.

Ou il y a une autre possibilité de comprendre ta phrase qui me convient
mieux, c'est qu'à chaque fois qu'une bibliothèque partagée est appelée
pour la *1ère* fois, elle serait mappée dans l'espace virtuel pour tout
le monde jusqu'à ce qu'il n'y ait plus aucun processus qui l'utilise et
alors elle serait "déchargée".



Il y a de ça. Chaque ouverture d'un fichier compte pour un lien vers
l'inode correspondant, au même titre que les liens durs dans les
répertoires. La mise à jour fait pointer le nom du fichier vers un
nouvel inode qui contient la nouvelle version du fichier, mais l'inode
originel reste présent tant qu'il reste des liens, donc tant qu'il n'est
pas fermé par les processus qui l'ont ouvert.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: https://lists.debian.org/
1 2 3 4