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âmetro | Tipo | Descrição |
|---|---|---|
| dirfd | int | Descritor do diretório base, ou AT_FDCWD. |
| pathname | const char * | Caminho a abrir. |
| how | struct open_how * | Flags, modo e flags de resolução de caminho. |
| size | size_t | Tamanho de `how`, para extensibilidade futura da struct. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | dirfdint |
| rsi | argumento 2 | pathnameconst char * |
| rdx | argumento 3 | howstruct open_how * |
| r10 | argumento 4 | sizesize_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.