Linux x86_64Memória#453
map_shadow_stack
Aloca uma shadow stack de hardware (Intel CET) para proteção contra ataques de ROP (Return-Oriented Programming).
Descrição
Parte do suporte a Control-flow Enforcement Technology (CET) em CPUs recentes: mantém uma pilha de retorno paralela, gerenciada por hardware, que detecta se um endereço de retorno na pilha normal foi corrompido por um ataque de sobrescrita de buffer.
man 2Desde o kernel 6.6
Nota
Exige suporte de hardware (Intel CET) e um kernel/toolchain com shadow stacks habilitadas; retorna ENOSYS em sistemas sem suporte.
Assinatura
long map_shadow_stack(
unsigned long addr,
unsigned long size,
unsigned int flags
);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| addr | unsigned long | Endereço sugerido para a shadow stack, ou 0 para o kernel escolher. |
| size | unsigned long | Tamanho da shadow stack. |
| flags | unsigned int | SHADOW_STACK_SET_TOKEN, entre outras. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | addrunsigned long |
| rsi | argumento 2 | sizeunsigned long |
| rdx | argumento 3 | flagsunsigned int |
Valor de retorno
Endereço onde a shadow stack foi criada em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EINVAL(22)
- Argumento inválido.
- ENOMEM(12)
- Memória insuficiente para completar a operação.
- ENOSYS(38)
- Chamada de sistema não implementada nesta versão do kernel.