[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Faille critique découverte dans GLIBC



On 2015-01-30 00:30:29 +0100, Francois Lafont wrote:
> Le 29/01/2015 22:12, Pascal Hambourg a écrit :
> > 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 
> 
> Tu parles bien de la mis à jour d'une lib ?
> Dans ce cas, je ne comprends pas trop ce que tu veux dire par "nouvel inode".
> Par exemple, j'ai ça :
> 
> ~$ touch /tmp/foo.so
> ~$ touch /tmp/foo.so.new-version
> 
> ~$ ls -i /tmp/foo.so*
> 523294 /tmp/foo.so  523295 /tmp/foo.so.new-version
> 
> # Je considère la commande ci-dessous comme une màj du fichier foo.so
> ~$ cp /tmp/foo.so.new-version /tmp/foo.so
> 
> # Et je constate que le numéro d'inode de foo.so n'a pas bougé ?
> ~$ ls -i /tmp/foo.so*
> 523294 /tmp/foo.so  523295 /tmp/foo.so.new-version

Mais une mise à jour ne fait pas un cp. Un "cp" va modifier un
fichier si la destination existe, pas créer un nouveau fichier.

> Du coup, j'ai pas dû comprendre quelque chose dans ta phrase.
> 
> > qui contient la nouvelle version du fichier, mais l'inode
> > originel reste présent 
> 
> Présent où ça ? Dans les « attributs » des processus en cours ?

Présent sur le disque (et référencé par les processus).

> > tant qu'il reste des liens, donc tant qu'il n'est
> > pas fermé par les processus qui l'ont ouvert.
> 
> Mais durant cette période transitoire où il reste encore des
> processus qui ont ouvert un fichier situé sur une zone A du
> disque, zone pointée par cet « ancien » inode, qu'en est-il
> de cette zone A du disque ? Est-elle disponible ou non ?

Non, elle n'est toujours pas disponible. Le fichier existe
toujours. Cf la page man unlink(2):

  unlink() deletes a name from the filesystem.  If that name was the last
  link to a file and no processes have the file open, the file is deleted
  and the space it was using is made available for reuse.

  If  the  name  was the last link to a file but any processes still have
  the file open, the file will remain in existence until  the  last  file
  descriptor referring to it is closed.

  If the name referred to a symbolic link, the link is removed.

> Si je comprends bien d'un côté cette zone n'est plus accessible via
> l'arborescence du filesystem car l'ancien inode n'existe plus. Du
> coup, cette zone du disque serait libre en quelques sortes ?

Non, l'ancien inode existe toujours (je suppose qu'un processus
qui a le fichier ouvert peut toujours faire un fstat sur le
descripteur de fichier pour obtenir le numéro d'inode).

-- 
Vincent Lefèvre <vincent@vinc17.net> - 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)


Reply to: