vm_protect_kkey 内核服务

用途

在内核地址范围上设置内核密钥。

语法

#include <sys/types.h>
#include <sys/skeys.h>
#include <sys/vmuser.h>
kerrno_t vm_protect_kkey (eaddr, nbytes, kkey, flags)
void * eaddr;
size_t nbytes;
kkey_t kkey;
unsigned long flags;

参数

描述
埃德尔 要保护的起始地址。
nbytes 要保护的字节数。
凯基 要在内存上设置的内核键值。
标志 定义的标志值为:
  • VMPK_NO_CHECK_AUTHORITY -此标志指示将不执行扩展权限检查。

描述

vm_protect_kkey() 内核服务用于变更与虚拟内存范围相关联的内核密钥。 如果已设置,那么引用内存的任何代码都需要在其活动密钥集中包含内核密钥。 为 eaddreaddr + nbytes-1指定的有效地址范围内的所有页面设置内核密钥。 如果地址范围未指定由完整页的整数组成的页对齐区域,那么将返回错误。

缺省情况下,在更改存储器密钥时执行权限检查。 此检查要求 vm_protect_kkey() 调用者对页面的当前内核密钥具有写访问权。 可以通过设置 VMPK_NO_CHECK_AUTHORITY 值来覆盖此权限检查,但建议不要这样做,因为此检查可以防止某些编程错误。

执行环境

只能从 进程环境 调用 vm_protect_kkey 内核服务。

返回值

表 1. 返回值
描述
0 成功。
EINVAL_VM_PROTECT_KKEY 参数或执行环境无效。
EINVAL_VM_PROTECT_KKEY_PPAGE 请求包含部分页面。
EFAULT_VM_PROTECT_KKEY 地址范围无效。
EPERM_VM_PROTECT_KKEY 权限不足,无法执行操作。

如果 vm_protect_kkey() 内核服务由于不同于 EINVAL_VM_PROTECT_KKEY 错误代码指定的条件而失败,那么可能已更改 (eaddreaddr + nbytes-1) 范围内某些页面的内核密钥。