Autorisations d'accès de /dev / mem

j'ai une série de questions concernant /dev/mem:

  1. beaucoup d'articles sur le net, semblent se référer /dev/mem comme la passerelle vers "Physical RAM". Mais si je suis en droit, /dev/mem à l'entrée de l' "Physical Address Space" du processeur qui pourrait inclure des registres de contrôle de plusieurs périphériques HW et pas seulement de la RAM? S'il vous plaît, corrigez-moi si je me trompe!

  2. afin d'empêcher les pirates d'abuser /dev/mem et modifier la mémoire du noyau, un drapeau CONFIG_STRICT_DEVMEM doit être activé, ce qui empêchera les applications utilisateur d'accéder à l'espace d'adresse physique au-delà de 1 Mo. J'ai vérifié le fichier de configuration sur mon PC (Ubuntu) et j'ai trouvé que CONFIG_STRICT_DEVMEM = y. J'ai écrit un programme qui tente de lire à la mémoire physique au-delà de 1 MO et j'ai pu lire! Aucun défaut de segmentation ni aucun Operation NOT Permitted erreur. Comment est-ce possible?

mon programme ressemble grossièrement à ceci:

fd = open ( "/dev/mem", O_RDWR);
ptr = (int*) mmap(0, MAP_SIZE, PROT_READ, fd, myAddress & (~MAP_MASK));
printf("%d", *ptr);
18
demandé sur horro 2011-05-26 11:12:16

2 réponses

  1. Oui, vous avez raison, /dev/mem permet d'associer n'importe quelle adresse physique, y compris les non-RAM mémoire mappée IO. Cela peut être utile pour un piratage rapide et sale pour accéder à un périphérique matériel sans écrire un pilote de noyau.

  2. CONFIG_STRICT_DEVMEM permet de vérifier les adresses du noyau dans /dev / mem avec devmem_is_allowed()arch/x86/mm/init.c, et le commentaire 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 BIOSes typiquement mettre la mémoire IO juste en dessous de 4 Go, donc c'est pourquoi vous êtes en mesure de le mapper même avec STRICT_DEVMEM.

13
répondu Roland 2011-05-27 05:53:56

Quel est le suivi du rendement:

cat /dev/mem | wc

j'obtiens:

cat: /dev/mem: Operation not permitted
   1908   11791 1048576

donc pour moi il s'arrête à 1MB.

notez que cat utilise Ouvert, pas mmap donc ce n'est pas un test identique.

Êtes-vous sûr de lire au-delà de 1MB?

2
répondu linuts 2011-05-26 08:23:33