Voltar à lista
Linux x86_64Arquivos & E/S#437

openat2

Versão estendida e mais segura de openat, com controle explícito sobre resolução de caminho e proteções contra symlink/mount tricks.

Descrição

Adiciona a struct `open_how`, que expõe flags de resolução (RESOLVE_NO_SYMLINKS, RESOLVE_BENEATH, RESOLVE_NO_MAGICLINKS, etc.) permitindo a runtimes de container e sandboxes abrir arquivos com garantias fortes contra escape via links simbólicos ou travessia de mount points maliciosa.

man 2Desde o kernel 5.6

Assinatura

int openat2(
    int dirfd,
    const char * pathname,
    struct open_how * how,
    size_t size
);

Parâmetros

ParâmetroTipoDescrição
dirfdintDescritor do diretório base, ou AT_FDCWD.
pathnameconst char *Caminho a abrir.
howstruct open_how *Flags, modo e flags de resolução de caminho.
sizesize_tTamanho de `how`, para extensibilidade futura da struct.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1dirfdint
rsiargumento 2pathnameconst char *
rdxargumento 3howstruct open_how *
r10argumento 4sizesize_t

Valor de retorno

Um novo descritor de arquivo em sucesso; -1 em erro, com errno definido.

Códigos de erro (errno)

EACCES(13)
Permissão negada.
EAGAIN(11)
Recurso temporariamente indisponível (tente novamente); também conhecido como EWOULDBLOCK.
ELOOP(40)
Excesso de níveis de links simbólicos (loop de symlinks).
ENOENT(2)
Arquivo ou diretório inexistente.
EXDEV(18)
Link cruzando dispositivos/sistemas de arquivos diferentes.
EINVAL(22)
Argumento inválido.

Relacionadas

Equivalente em Windows Win32