Files
xdp/troubleshooting_xdp_bpf.md
2025-02-28 20:34:36 -03:00

2.1 KiB

Diagnóstico da Falha de Carregamento do XDP

Analisando o erro de carregamento do programa XDP xdp_wg_mtu_optimizer.o, identifiquei os seguintes problemas:

Principal erro detectado

invalid access to packet, off=34 size=1, R1(id=3,off=34,r=34)
R1 offset is outside of the packet

O verificador de BPF está detectando um acesso inválido à memória do pacote. O programa tenta acessar dados além dos limites verificáveis pelo verificador estático do BPF.

Causas prováveis

  1. Verificação de limites inadequada: Quando processamos opções TCP, o verificador BPF não consegue comprovar estaticamente que todos os acessos estão dentro dos limites do pacote.

  2. Problema de alinhamento de ponteiros: O código usa vários tipos de ponteiros (IPv4, TCP, opções TCP) com diferentes deslocamentos que estão causando confusão no verificador.

  3. Análise estática limitada: O verificador BPF não consegue seguir todas as ramificações do código para garantir que os acessos sejam seguros.

Soluções possíveis para implementação XDP futura

Para implementar o código XDP para otimização de MTU no futuro, considere estas abordagens:

  1. Simplificação do programa: Reduzir a complexidade, especialmente no processamento de opções TCP.

  2. Bounds checking explícito: Adicionar mais verificações de limites explícitas antes de acessar os campos:

if ((void *)(tcp_opt_ptr + 4) <= data_end && tcp_opt_ptr + 4 <= tcp_opt_end) {
    // Agora é seguro acessar tcp_opt_ptr[0], tcp_opt_ptr[1], etc.
}
  1. Uso de loops fixos: O verificador BPF tem problemas com loops que não são estáticos. Use unroll forçado:
#pragma unroll
for (int i = 0; i < 4; i++) {  // Número fixo pequeno de iterações
    // código do loop
}
  1. Versão do kernel: Considere atualizar o kernel para obter um verificador BPF mais recente que pode lidar melhor com estas verificações.

  2. Técnica de CO-RE (Compile Once Run Everywhere): Use abordagens mais modernas de BPF com BTF para melhorar a portabilidade e verificação.