Linux Internals: How /proc/self/mem writes to unwritable memory (2021)
Cet article analyse le comportement « punch through » de /proc/*/mem qui permet d’écrire dans des pages autrement protégées. Il montre que des projets comme Julia JIT et rr utilisent cette capacité pour modifier l’exécution et le comportement du processus. Sur le plan matériel, CR0.WP et CR4.SMAP régissent les permissions mémoire, mais l’auteur explique qu’ils ne constituent pas une barrière irréductible. La mise en œuvre de /proc/*/mem dans fs/proc/base.c s’appuie sur get_user_pages_remote, kmap et copy_to_user_page pour réaliser les écritures en contournant le MMU. En conclusion, les mécanismes de protection du CPU peuvent être contournés par le noyau via la gestion des mappings mémoire, ce qui remet en cause l’isolation entre noyau et espace utilisateur.