Voltar à lista
Linux x86_64Segurança#321

bpf

Ponto de entrada para carregar, verificar e gerenciar programas eBPF e os mapas que eles usam.

Descrição

eBPF permite executar programas sandboxed, verificados estaticamente, dentro do kernel, sem escrever um módulo de kernel — usado hoje para observabilidade (bpftrace, Cilium Hubble), redes de alta performance (XDP, Cilium), segurança (filtros seccomp avançados, LSM BPF) e mais. A verificação rigorosa feita pelo kernel antes de aceitar um programa é o que o torna seguro para uso não privilegiado (com restrições).

Header: linux/bpf.hman 2Desde o kernel 3.18

Nota

Carregar a maioria dos tipos de programa exige CAP_BPF (ou CAP_SYS_ADMIN em kernels mais antigos).

Assinatura

int bpf(int cmd, union bpf_attr * attr, unsigned int size);

Parâmetros

ParâmetroTipoDescrição
cmdintComando: BPF_PROG_LOAD, BPF_MAP_CREATE, BPF_MAP_UPDATE_ELEM, BPF_OBJ_PIN, entre dezenas de outros.
attrunion bpf_attr *União com os atributos específicos do comando.
sizeunsigned intTamanho de `attr` usado pelo chamador, para compatibilidade entre versões do kernel.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1cmdint
rsiargumento 2attrunion bpf_attr *
rdxargumento 3sizeunsigned int

Valor de retorno

Depende de `cmd` — frequentemente um descritor de arquivo (para programas/mapas) ou 0. -1 em erro, com errno definido.

Códigos de erro (errno)

EACCES(13)
Permissão negada.
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