Un cambio menor en un programa BPF, sustituyendo cabeceras del kernel por definiciones generadas con BTF (vmlinux.h), provocó fallos silenciosos en la validación de sumas de verificación L3. El problema no residía en la lógica de cálculo, sino en una optimización agresiva del compilador Clang basada en las reglas estrictas de aliasing (Strict Aliasing). Al leer un campo uint16_t que solapaba con una estructura struct iphdr, el compilador asumía erróneamente que la memoria no había cambiado tras una escritura parcial, eliminando la relectura necesaria para recalcular la suma. La raíz técnica se encuentra en cómo el atributo preserve_access_index, específico de BPF y presente en vmlinux.h, altera la generación del código intermedio LLVM. Este atributo enmascara las instrucciones GEP (GetElementPtr) mediante un intrínseco, impidiendo que el análisis de alias de LLVM detecte la solapación de offsets entre la lectura y la escritura. La solución efectiva no es desactivar todas las optimizaciones con -fno-strict-aliasing, sino utilizar la macro READ_ONCE alrededor de las lecturas de memoria. Esta técnica fuerza al compilador a realizar una relectura explícita, garantizando que el valor actualizado en la estructura se refleje correctamente en el cálculo incremental de la suma de verificación IPv4.
