ИМЯ pkey_alloc, pkey_free - выделяет или освобождает ключ защиты
ОБЗОР #include <sys/mman.h>
int pkey_alloc(unsigned long flags, unsigned long access_rights); int pkey_free(int pkey);
ОПИСАНИЕ Вызов pkey_alloc() выделяет ключ защиты (pkey), который можно передавать в pkey_mprotect(2).
Аргумент pkey_alloc() flags может содержать ноль или более запретительных операций:
PKEY_DISABLE_ACCESS Запретить доступ ко всем данным памяти, на которую наложен возвращаемый ключ.
PKEY_DISABLE_WRITE Запретить доступ на запись в память, на которую наложен возвращаемый ключ.
Вызов pkey_free() освобождает ключ защиты и делает его доступным для будущего выделения. После освобождения ключа защиты он может больше не использоваться в операциях по защите ключом.
Приложение не должно вызывать pkey_free() с ключом защиты, который был назначен адресному диапазону с помощью pkey_mprotect(2) и который пока используется. Это вызывает непредсказуемое поведение и может привести к ошибке.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ При успешном выполнении pkey_alloc() возвращает положительное значение ключа защиты. Вызов pkey_free() возвращает ноль. При ошибке возвращается -1 и errno присваивается соответствующее значение.
ОШИБКИ EINVAL Неверное значение pkey, flags или access_rights.
ENOSPC (pkey_alloc()) Все ключи защиты, доступные текущему процессу уже распределены. Количество доступных ключей зависит от архитектуры и реализации и может быть меньшим из-за использования отдельных ключей самим ядром. В настоящее время на x86 для пользовательской программы доступно 15 ключей.
Также эта ошибка возвращается, если процессор или операционная система не поддерживают ключи защиты. Приложения всегда должны быть готовы к получению этой ошибки, так как приложение не может контролировать сокращение количества доступных pkey.
ВЕРСИИ Системные вызовы pkey_alloc() и pkey_free() добавлены в ядро Linux версии 4.9. В glibc поддержка отсутствует.
СООТВЕТСТВИЕ СТАНДАРТАМ Системные вызовы pkey_alloc() и pkey_free() есть только в Linux.
pkey_free()), ядро может вносить произвольные изменения в части регистров прав, относящихся к этому ключу.
ПРИМЕР Смотрите pkeys(7).
СМОТРИТЕ ТАКЖЕ pkey_mprotect(2), pkeys(7)
|