On peut supposer qu'il s'agit d'un lien avec la mémoire. Qu'est-ce qui
sudo cat /dev/urandom > /dev/mem
faire ? Mettre à la poubelle toute la mémoire vive ? Toute la mémoire virtuelle non liée au noyau ? Rien de tout cela ?
On peut supposer qu'il s'agit d'un lien avec la mémoire. Qu'est-ce qui
sudo cat /dev/urandom > /dev/mem
faire ? Mettre à la poubelle toute la mémoire vive ? Toute la mémoire virtuelle non liée au noyau ? Rien de tout cela ?
Il permet d'accéder à la mémoire physique du système.
En mem(4)
page de manuel explique plus en détail ce qu'est la /dev/mem
est.
Oui, cela pourrait causer toutes sortes de problèmes. Un redémarrage devrait régler le problème, mais de mauvaises choses peuvent se produire très facilement. Soyez prudent ! :-)
sudo cat /dev/urandom > /dev/mem
ne fera rien, puisque sudo élèvera les privilèges de cat mais pas ceux de la redirection. Vous pouvez soit faire sudo su
et travailler ensuite dans le Shell racine, ou utilisersudo dd if=/dev/urandom of=/dev/mem
/dev/mem
permet d'accéder à la mémoire physique, c'est-à-dire à toute la mémoire vive du système, mais cela ne signifie pas qu'il vous donne un accès complet en lecture/écriture à la mémoire vive (voir l'option CONFIG_STRICT_DEVMEM dans la rubrique este ). Notez également que certaines régions de la mémoire physique sont occupées par d'autres périphériques tels que la mémoire de la carte vidéo, etc.
Écrire aveuglément à /dev/mem
se traduira par un comportement incertain, ici est une vidéo youtube qui fait la même chose.
Testez-le avec busybox devmem
busybox devmem
est un petit utilitaire CLI qui permet d'imbriquer /dev/mem
.
Vous pouvez l'obtenir sous Ubuntu avec : sudo apt-get install busybox
Utilisation : lecture de 4 octets de l'adresse physique 0x12345678
:
sudo busybox devmem 0x12345678
Écrire 0x9abcdef0
à cette adresse :
sudo busybox devmem 0x12345678 w 0x9abcdef0
Source : https://github.com/mirror/busybox/blob/1_27_2/miscutils/devmem.c#L85
MAP_SHARED
Lorsque la cartographie /dev/mem
que vous voudrez probablement utiliser :
open("/dev/mem", O_RDWR | O_SYNC);
mmap(..., PROT_READ | PROT_WRITE, MAP_SHARED, ...)
MAP_SHARED
fait que les écritures vont immédiatement dans la mémoire physique, ce qui facilite l'observation et est plus logique pour les écritures dans les registres matériels.
CONFIG_STRICT_DEVMEM
y nopat
Pour utiliser /dev/mem
pour visualiser et modifier la RAM régulière sur le noyau v4.9, il faut commencer :
CONFIG_STRICT_DEVMEM
(définie par défaut sur Ubuntu 17.04)nopat
Option de ligne de commande du noyau pour x86Les ports IO fonctionnent toujours sans eux.
Vidange du cache
Si vous essayez d'écrire dans la RAM au lieu d'un registre, la mémoire peut être mise en cache par le CPU : https://stackoverflow.com/questions/22701352/how-to-flush-the-cpu-cache-for-a-region-of-address-space-in-linux et je ne vois pas de moyen très portable / facile de le vider ou de marquer la région comme non cachable :
Alors peut-être que /dev/mem
ne peut pas être utilisé de manière fiable pour transmettre des tampons de mémoire à des dispositifs ?
Cela ne peut malheureusement pas être observé dans QEMU, car ce dernier ne simule pas les caches.
Comment le tester
Passons maintenant à la partie la plus amusante. Voici quelques exemples d'installations sympas :
volatile
sur un processus userland/proc/<pid>/maps
+ /proc/<pid>/pagemap
devmem2
et observez la réaction du processus userland :kmalloc
virt_to_phys
et de le renvoyer à l'utilisateurdevmem2
devmem2
pour écrire dans le registreprintf
sortent de l'appareil virtuel en réponse/dev/mem permettait traditionnellement d'accéder à l'ensemble de l'espace d'adressage physique. Cela inclut la mémoire vive, mais aussi tous les périphériques d'E/S mappés en mémoire.
De nombreux noyaux modernes sont configurés avec "CONFIG_STRICT_DEVMEM" qui restreint /dev/mem aux seuls périphériques d'E/S mappés en mémoire.
L'écriture de déchets aléatoires est une mauvaise idée, mais il est difficile de prédire exactement ce qui va se passer. Le matériel peut réagir de manière imprévisible à des déchets aléatoires, des structures de mémoire du noyau corrompues peuvent entraîner un comportement imprévisible du noyau. Au mieux, je m'attendrais à un plantage du système, au pire à une corruption des données ou même à une panne du matériel, ce qui n'est pas exclu.
P.S. Notez que votre commande, lorsqu'elle est exécutée par un utilisateur normal, ne devrait rien faire, car le sudo n'active que la commande cat, pas la redirection.
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.