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内核服务只能从进程环境中调用。

返回值

描述
重大安全事件数量 成功。
einval_vm_protect_kkey 参数或执行环境无效。
einval_vm_protect_kkey_ppage 请求包含部分页面。
efault_vm_protect_kkey 地址范围无效。
eperm_vm_protect_kkey 权限不足,无法执行操作。

如果vm_protect_kkey()内核服务由于EINVAL_VM_PROTECT_KEY错误代码指定的条件之外的原因而失败,则(eaddr,eaddr + nbytes - 1) 范围内某些页面的内核密钥可能已被更改。