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.18Nota
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âmetro | Tipo | Descrição |
|---|---|---|
| cmd | int | Comando: BPF_PROG_LOAD, BPF_MAP_CREATE, BPF_MAP_UPDATE_ELEM, BPF_OBJ_PIN, entre dezenas de outros. |
| attr | union bpf_attr * | União com os atributos específicos do comando. |
| size | unsigned int | Tamanho de `attr` usado pelo chamador, para compatibilidade entre versões do kernel. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | cmdint |
| rsi | argumento 2 | attrunion bpf_attr * |
| rdx | argumento 3 | sizeunsigned 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).