Linux x86_64Memória#462
mseal
Torna imutáveis (seladas) as propriedades de um mapeamento de memória, impedindo mudanças futuras via mmap/mprotect/munmap.
Descrição
Defesa contra classes de exploits que dependem de remapear ou reprotejer regiões de memória sensíveis (ex.: seções de código, tabelas de função) depois que o programa já as considerava fixas — usada, por exemplo, para proteger estruturas internas do glibc contra sequestro em tempo de execução.
man 2Desde o kernel 6.10
Atenção
A operação é irreversível para a região selada durante toda a vida do mapeamento — não há syscall para 'desselar'.
Assinatura
int mseal(unsigned long addr, size_t len, unsigned long flags);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| addr | unsigned long | Início da região a selar, alinhado ao tamanho de página. |
| len | size_t | Tamanho da região. |
| flags | unsigned long | Reservado; deve ser 0. |
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 | lensize_t |
| rdx | argumento 3 | flagsunsigned long |
Valor de retorno
0 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.
- EPERM(1)
- Operação não permitida (falta de privilégio).