Разрешения доступа /dev/mem

У меня есть ряд вопросов относительно /dev/mem:

  1. Многие статьи в сети, кажется, ссылаются на /dev/mem как на шлюз к "Физической оперативной памяти". Но если я прав, /dev/mem является шлюзом в "Физическое адресное пространство" процессора, которое может включать управляющие регистры многих периферийных устройств HW, а не только оперативную память? Пожалуйста, поправьте меня, если я ошибаюсь!

  2. Для того, чтобы предотвратить неправильное использование /dev/mem злоумышленниками и изменение памяти ядра, необходимо включить флаг CONFIG_STRICT_DEVMEM, который не позволит пользовательским приложениям получить доступ к физическому адресному пространству за пределами 1МБ. Я проверил конфигурационный файл на моем ПК (Ubuntu) и обнаружил, что CONFIG_STRICT_DEVMEM = y. И я написал программу, которая пытается читать в физическую память за пределами 1 Мб, и смог прочитать! Ошибки сегментации или операции NOT Permitted. Как такое возможно?

Моя программа примерно так выглядит:

fd = open ( "/dev/mem", O_RDWR);
ptr = (int*) mmap(0, MAP_SIZE, PROT_READ, fd, myAddress & (~MAP_MASK));
printf("%d", *ptr);
19
задан horro 4 October 2017 в 15:08
поделиться