vm_protect_kkey 内核服务
用途
在内核地址范围上设置内核密钥。
语法
参数
| 项 | 描述 |
|---|---|
| 埃德尔 | 要保护的起始地址。 |
| nbytes | 要保护的字节数。 |
| 凯基 | 要在内存上设置的内核键值。 |
| 标志 | 定义的标志值为:
|
描述
vm_protect_kkey()内核服务用于更改与虚拟内存范围相关的内核密钥。 如果已设置,那么引用内存的任何代码都需要在其活动密钥集中包含内核密钥。 在eaddr至eaddr + 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) 范围内某些页面的内核密钥可能已被更改。