ОБЗОР
long subpage_prot(unsigned long addr, unsigned long len,
uint32_t *map);
Замечание:В glibc нет обёрточной функции для данного системного вызова; смотрите ЗАМЕЧАНИЯ.
ОПИСАНИЕ
Системный вызов (есть только для PowerPC) subpage_prot() предоставляет возможность контроля доступа к отдельным 4КБ подстраницам в системах, где размер страницы равен 64КБ.Карта защиты налагается на страницы памяти для области, начинающейся с addr и имеющей размер len байт. Значения обоих аргументов должны быть выровнены на 64-КБ границу.
Карта защиты задаётся в буфере, на который указывает map. В карте на каждую 4-килобайтную подстраницу выделяется 2 бита; таким образом, в каждом 32-битном слове задаётся защита для 16 4-килобайтных подстраниц внутри 64-килобайтной страницы (поэтому количество 32-битных слов, на которые указывает map, должно быть равно количеству 64-килобайтных страниц, указанному в len). Каждое 2-битное поле в карте защиты может быть: 0 — полный доступ, 1 — защита от записи, 2 или 3 — запрет на любой доступ.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении subpage_prot() возвращается 0. В противном случае возвращается один из кодов ошибок, описанных далее.ОШИБКИ
- EFAULT
- Буфер, на который ссылается map, недоступен.
- EINVAL
- Некорректное значение аргумента addr или len. Оба значения должны быть кратны размеру системной страницы, и они не должны указывать на область вне адресного пространства процесса, или на область, которая состоит из огромных страниц.
- ENOMEM
- Не хватает памяти.
ВЕРСИИ
Данный системный вызов предоставляется для архитектуры PowerPC начиная с Linux 2.6.25. Для его сборки в ядре должен быть указан параметр CONFIG_PPC_64K_PAGES. В библиотеке поддержка данного вызова отсутствует.СООТВЕТСТВИЕ СТАНДАРТАМ
Данный вызов есть только в Linux.ЗАМЕЧАНИЯ
В glibc нет обёртки для данного системного вызова; запускайте его с помощью syscall(2).Обычная страничная защита также работает (на уровне 64-килобайтных страниц); механизм подстраничной защиты является дополнительным ограничением, поэтому указание 0 в 2-битном поле не разрешит запись в страницу, которая защищена от записи другим способом.