Voltar à lista
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âmetroTipoDescrição
addrunsigned longInício da região a selar, alinhado ao tamanho de página.
lensize_tTamanho da região.
flagsunsigned longReservado; deve ser 0.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1addrunsigned long
rsiargumento 2lensize_t
rdxargumento 3flagsunsigned 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).

Relacionadas