Que donne ce qui suit :
cat /dev/mem | wc
J'obtiens :
cat: /dev/mem: Operation not permitted
1908 11791 1048576
Donc pour moi, ça s'arrête à 1 Mo.
Notez que cat utilise open, pas mmap donc ce n'est pas un test identique.
Êtes-vous sûr de lire au-delà de 1 Mo ?
-
Oui, vous avez raison, /dev/mem vous permet de mapper n'importe quelle adresse physique, y compris les E/S mappées en mémoire non RAM. Cela peut être utile pour un piratage rapide et sale pour accéder à un périphérique matériel sans écrire de pilote de noyau.
-
CONFIG_STRICT_DEVMEM oblige le noyau à vérifier les adresses dans /dev/mem avec
devmem_is_allowed()
enarch/x86/mm/init.c
, et le commentaire qui s'y trouve explique :* On x86, access has to be given to the first megabyte of ram because that area * contains bios code and data regions used by X and dosemu and similar apps. * Access has to be given to non-kernel-ram areas as well, these contain the PCI * mmio resources as well as potential bios/acpi data regions.
votre adresse
0xFFFF0000
est très probablement non RAM, car les BIOS placent généralement la mémoire IO juste en dessous de 4 Go, c'est pourquoi vous pouvez la mapper même avec STRICT_DEVMEM.