SystemTap 5.6 llega con hooks LSM, sondas XDP y compatibilidad con Linux 7.2
La herramienta de trazado dinámico estrena soporte de hooks de seguridad y procesado de paquetes en su runtime BPF, sondas de tracepoint basadas en BTF y firma de módulos con ML-DSA.
SystemTap 5.6 ya está disponible. La nueva versión de la herramienta de trazado dinámico para Linux añade hooks LSM y sondas XDP cuando se ejecuta sobre el motor BPF, descubre tracepoints a partir de BTF sin cabeceras de trace y prepara el terreno para los kernels 7.2, con unos 260 commits y alrededor de 26 arreglos o funcionalidades nuevas desde la entrega anterior.
El anuncio lo firma Frank Ch. Eigler en la lista del proyecto, y el código está etiquetado como release-5.6.
El runtime BPF es donde más se mueve
Lo interesante está en --bpf. Ahora acepta hooks LSM (lsm.bprm_check_security, lsm.file_open, lsm.socket_create y bastantes más) que permiten decidir si una operación se permite o se deniega, usando $ctx con @cast() y $return. Pide kernel 5.7 o superior y CONFIG_BPF_LSM=y. También hay sondas XDP para inspeccionar paquetes en la interfaz de red y devolver veredicto pass/drop/tx, con kernel 4.8+ y CONFIG_BPF_SYSCALL=y.
Las sondas kernel.tracepoint("nombre") y module("mod").tracepoint("nombre") se descubren a partir de los typedefs btf_trace_* sin necesitar cabeceras de trace ni tracefs. Los argumentos llegan posicionales ($arg1...). Necesitan vmlinux.h o CONFIG_DEBUG_INFO_BTF en las sondas de kernel, y son una vía distinta de kernel.trace("sistema:nombre").
Cambios en el lenguaje y en la operación
@cast() atraviesa typedefs, y aparece @enumname(), que traduce un valor entero al nombre del enumerador DWARF, justo lo inverso de @enum(); un valor desconocido se muestra en decimal. También se respetan las expresiones DW_OP_entry_value, lo que mejora el pretty-printing de $parm$ y $var$ y el acceso @entry() a locales que solo existen en la entrada de la función.
Para depurar scripts, --debug compila el módulo .ko o el .so de dyninst con información máxima y lanza pahole(1) si está disponible. El trazado instrucción a instrucción llega con stap -D STP_EXECTRACE, aunque de momento no funciona con --bpf. Los errores en tiempo de ejecución incluyen ahora una pequeña pila de llamadas y el probe point activo. También hay watchpoints hardware de process.data bajo --runtime=dyninst y extracción de build IDs de kernels comprimidos o no ELF en aarch64 y s390x.
Hay ruptura en el empaquetado: desaparece la infraestructura del initscript systemtap-service y la sustituyen plantillas systemd, stap@.service y staprun@.service, más un stap-onboot suelto para initramfs. Se añade firma de módulos ML-DSA opcional junto a la RSA por defecto, con OpenSSL 3.5+ o NSS detrás. Y se retira el sondeo de Python 2: los tapsets se separan por versión menor, de la 3.9 a la 3.15.
El paquete completo está en la página del proyecto y los tarballs en el directorio de entregas. Los 209 scripts de ejemplo siguen publicándose aparte, con dos nuevos dedicados a XDP.
Para quien mantiene instrumentación en producción, lo que obliga a tocar cosas es la retirada de systemtap-service y de Python 2, no las mejoras del runtime. El resto es la tendencia de fondo: cada vez más capacidades apoyadas en BTF, que reducen la dependencia de tracefs y de cabeceras de trace a cambio de exigir kernels y configuraciones más recientes. Si tus máquinas son antiguas, conviene revisar la matriz de compatibilidad antes de actualizar.