pkey_alloc, pkey_free -
выделяет
или
освобождает
ключ
защиты
Standard C library (
libc,
-lc)
#define _GNU_SOURCE /* смотрите feature_test_macros(7) */
#include <sys/mman.h>
int pkey_alloc(unsigned int flags, unsigned int access_rights);
int pkey_free(int pkey);
Вызов
pkey_alloc()
выделяет
ключ
защиты (pkey),
который
можно
передавать
в
pkey_mprotect(2).
Аргумент
flags
вызова
pkey_alloc()
зарезервирован
для
использования
в будущем и
в
настоящее
время
должен
равняться 0.
Аргумент
access_rights вызова
pkey_alloc() может
содержать
ноль или
более
запретительных
операций:
- PKEY_DISABLE_ACCESS
- Запретить
доступ ко
всем
данным
памяти, на
которую
наложен
возвращаемый
ключ.
- PKEY_DISABLE_WRITE
- Запретить
доступ на
запись в
память, на
которую
наложен
возвращаемый
ключ.
Вызов
pkey_free()
освобождает
ключ
защиты и
делает его
доступным
для
будущего
выделения.
После
освобождения
ключа
защиты он
может
больше не
использоваться
в
операциях
по защите
ключом.
Приложение
не должно
вызывать
pkey_free() с ключом
защиты,
который
был
назначен
адресному
диапазону
с помощью
pkey_mprotect(2) и
который
пока
используется.
Это
вызывает
непредсказуемое
поведение
и может
привести к
ошибке.
On success,
pkey_alloc() returns a positive protection key value. On
success,
pkey_free() returns zero. On error, -1 is returned, and
errno is set to indicate the error.
- EINVAL
- Неверное
значение
pkey, flags или
access_rights.
- ENOSPC
- (pkey_alloc()) Все
ключи
защиты,
доступные
текущему
процессу
уже
распределены.
Количество
доступных
ключей
зависит от
архитектуры
и
реализации
и может
быть
меньшим
из-за
использования
отдельных
ключей
самим
ядром. В
настоящее
время на x86
для
пользовательской
программы
доступно 15
ключей.
- Также
эта ошибка
возвращается,
если
процессор
или
операционная
система не
поддерживают
ключи
защиты.
Приложения
всегда
должны
быть
готовы к
получению
этой
ошибки, так
как
приложение
не может
контролировать
сокращение
количества
доступных
pkey.
pkey_alloc() and
pkey_free() were added in Linux 4.9; library
support was added in glibc 2.27.
Системные
вызовы
pkey_alloc() и
pkey_free() есть
только в Linux.
Вызов
pkey_alloc()
всегда
безопасен
в
независимости
от
поддержки
ключей
операционной
системой.
Его можно
использовать
как
механизм
определения
поддержки pkey;
он всегда
просто
возвращает
ошибку
ENOSPC,
если
операционная
система не
поддерживает
pkey.
Ядро
гарантирует,
что
содержимое
аппаратных
регистров
прав (PKRU)
будет
сохранено
только для
выделенных
ключей
защиты.
Пока ключ
не выделен
(до первого
вызова,
возвращающего
этот ключ
pkey_alloc(), или
после его
освобождения
с помощью
pkey_free()), ядро
может
вносить
произвольные
изменения
в части
регистров
прав,
относящихся
к этому
ключу.
Смотрите
pkeys(7).
pkey_mprotect(2),
pkeys(7)
Русский
перевод
этой
страницы
руководства
был сделан
Alexey, Azamat Hackimov <
[email protected]>, kogamatranslator49
<
[email protected]>, Kogan, Max Is <
[email protected]>, Yuri
Kozlov <
[email protected]> и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]