Linux x86_64Memória#329
pkey_mprotect
Como mprotect, mas também associa a região a uma memory protection key (MPK).
Descrição
Memory Protection Keys (suporte de hardware em CPUs Intel/AMD recentes) permitem alternar rapidamente a permissão de várias regiões de memória associadas à mesma chave com uma única instrução em espaço de usuário (WRPKRU), sem chamada de sistema — muito mais rápido que `mprotect` repetido para alternância frequente de permissões.
man 2Desde o kernel 4.9
Assinatura
int pkey_mprotect(void * addr, size_t len, int prot, int pkey);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| addr | void * | Início da região, alinhado ao tamanho de página. |
| len | size_t | Tamanho da região. |
| prot | int | Proteção de memória, como em mprotect. |
| pkey | int | Chave de proteção (obtida via pkey_alloc) a associar à região. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | addrvoid * |
| rsi | argumento 2 | lensize_t |
| rdx | argumento 3 | protint |
| r10 | argumento 4 | pkeyint |
Valor de retorno
0 em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EACCES(13)
- Permissão negada.
- EINVAL(22)
- Argumento inválido.
- ENOMEM(12)
- Memória insuficiente para completar a operação.