Cosa produce quanto segue:
cat /dev/mem | wc
Ottengo:
cat: /dev/mem: Operation not permitted
1908 11791 1048576
Quindi per me si ferma a 1 MB.
Nota che cat usa open, non mmap quindi non è un test identico.
Sei sicuro di leggere oltre 1 MB?
-
Sì, hai ragione, /dev/mem ti consente di mappare qualsiasi indirizzo fisico, incluso l'IO mappato in memoria non RAM. Questo può essere utile per un hack rapido e sporco per accedere a qualche dispositivo hardware senza scrivere un driver del kernel.
-
CONFIG_STRICT_DEVMEM fa in modo che il kernel controlli gli indirizzi in /dev/mem con
devmem_is_allowed()
inarch/x86/mm/init.c
, e il commento lì spiega:* 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.
il tuo indirizzo
0xFFFF0000
è molto probabile che non sia RAM, poiché i BIOS in genere mettono la memoria IO appena sotto i 4 GB, quindi è per questo che puoi mapparla anche con STRICT_DEVMEM.