2016-11-01 3 views
0

J'essaie de comprendre cette preuve de concept CoW sale: https://github.com/dirtycow/dirtycow...ter/dirtyc0w.c. Que se passe-t-il lorsqu'un thread fils (procselfmemThread dans le lien ci-dessus) écrit dans la mémoire mappée en tant que MAP_PRIVATE et PROT_READ par le parent? Plus précisément, le noyau modifie-t-il le mappage existant pour qu'il soit anonyme et inscriptible? Et quand la copie sur écriture a-t-elle lieu? Supposons que l'autre thread enfant (madviseThread dans le lien ci-dessus) ne fonctionne pas.Écriture dans MAP_PRIVATE fichier mmaped

Répondre

0

Pour répondre précisément à votre question, répondez en deux parties 1. mémoire carte lecture seule fichier depuis que vous avez déjà cartographié un fichier avec PROT_READ et MAP_PRIVATE, cela va créer la VMA (zone de mémoire virtuelle) pour votre fichier. VMA n'est rien d'autre qu'une structure de métadonnées pour gérer votre région de processus comme les régions de texte, de données et de mmap. VMA aura l'adresse de début et de fin, ces adresse de début et de fin sont essentiellement vos adresses virtuelles de processus pour la région mappée mémoire qui est sauvegardée par fichier et une région rouge seulement (depuis PROT_READ).

  1. écrivent à/proc/self/mem
    /proc/self/mem est un fichier spécial qui permet d'accéder à traiter l'espace d'adressage virtuel, puisque dans le programme mentionné par u , il recherche le descripteur de fichier dans la région mappée en mémoire (MAP_PRIVATE). il écrit fondamentalement à la région mappée de mémoire du dossier mappé antérieur, puisque c'était un mappage de lecture seule en étant écrit il crée une copie de la page et la copie sur l'écriture a lieu. Notr: ici/proc/self/mem fichier en cours d'écriture n'est pas la région mappée en mémoire du fichier.