Skip to content

Releases: anakryiko/retsnoop

v0.10.1

09 Oct 22:44
Compare
Choose a tag to compare

Bug fixes

  • handle crash that might happen when function argument capture is enabled and some data is dropped (due to too high rate of function calls, overflowing ringbuf);
  • fix handling of thread/process name filter (-n/-N);
  • fix problem with BPF verification failure on some kernel versions;
  • sidecar updates, removing deprecated addr2line API usage and updating to clap 4 for command line args parsing.

What's Changed

  • logic: fix handling of partial fnargs/ctxargs data by @anakryiko in #76
  • retsnoop: avoid checking if (sess->defunct) twice by @anakryiko in #81
  • sidecar: Remove usage of deprecated APIs by @d-e-s-o in #80
  • retsnoop: fix handling -n (--comm) and -N (--no-comm) filtering by @mannkafai in #82
  • sidecar: migrate from clap 2 to clap 4 by @theihor in #83
  • Re-generate vmlinux.h by @anakryiko in #84
  • vmlinux.h: regenerate vmlinux.h again, with feeling by @anakryiko in #85

New Contributors

Full Changelog: v0.10...v0.10.1

v0.10

02 Sep 20:10
Compare
Choose a tag to compare

Major changes

This is a big release with some new major features added (though we still stay within minor version update, as there might be still some minor breaking changes). Most notable changes:

  • Function arguments capture (-A argument). Retsnoop now can capture all input arguments for all traced functions and print them in human-readable form. See README for more details.
  • Injected probes (-J). In addition to traced functions specified with -e and -a flags, it's now possible to also specify a single-point injected probes (kprobes, kretprobes, tracepoints, and raw tracepoints). Note that for kprobe, it's possible to specify extra offset (e.g., -J kprobe:bprm_execve+12), which allows to trace inlined functions and internals of functions (normally retsnoop only traces function entry and exit). See README for more details.
  • Retsnoop can also capture extra context for injected probes, just use -A and -J together. For kprobes and kretprobes registers state is captured, for tracepoints and raw tracepoints their actual arguments are captured. See README for more details.
  • (Breaking change!) It's now possible to enable only function call trace mode (-T) separately from default call stack mode. The latter now is controlled with -E flag. The important distinction and a breaking change is that with function call trace mode --success-stacks/-S option is implied, which makes most sense for function call tracing. When retsnoop -E is specified, even with -T, the original behavior of tracing and emitting only erroring call stacks (i.e., those that end up returning error from entry functions specified with -e arguments). So, in short:
    • retsnoop -T emits all function call trace, both successful and erroring;
    • retsnoop -E (or just retsnoop, as -E is the default mode) emits only erroring call stacks (no function call traces);
    • retsnoop -E -S will emit call stacks only (no function call traces), but both erroring and successful ones;
    • retsnoop -E -T will emit both call stacks and function call traces, but only erroring ones;
    • retsnoop -E -T -S will do both call stacks and function call trace for both successful and erroring cases.
  • Added kernel module BTF support, improving tracing functions defined in kernel modules.
  • Added advanced configuration options, specified with -C flag. See retsnoop --config-help for list of supported options and more details.
  • Significant rework of --help output.
  • Many smaller bug fixes and usability improvements.

What's Changed

New Contributors

Full Changelog: v0.9.8...v0.10

v0.9.8

25 Jan 03:22
Compare
Choose a tag to compare

What's Changed

  • A few small fixes and clean ups by @anakryiko in #53
  • bpftool: Pass additional compile flags as EXTRA_CFLAGS, not CFLAGS by @qmonnet in #52
  • sidecar: Update addr2line dependency to 0.21 by @danielocfb in #55

New Contributors

Full Changelog: v0.9.7...v0.9.8

retsnoop v0.9.7

01 Oct 04:35
Compare
Choose a tag to compare

What's Changed

  • Add release workflow for shipping binaries and combined sources by @qmonnet in #42 and #44
  • retsnoop: Fix sign extension failure logic by @anakryiko in #50
  • retsnoop: Remove a limit of 4096 attachable functions by @anakryiko in #48
  • retsnoop: Remove hard-coded maximum of 256 CPUs supported by @anakryiko in #49
  • retsnoop: Use bpf_probe_read_kernel() instead of bpf_probe_read() by @iii-i in #46
  • retsnoop: Pass the real envp to the sidecar by @erthalion in #47

New Contributors

Full Changelog: v0.9.6...v0.9.7

retsnoop v0.9.6

24 Mar 20:30
Compare
Choose a tag to compare

What's Changed

  • Fix calibration unreliability on some new kernels by @anakryiko in #41

Full Changelog: v0.9.5...v0.9.6

retsnoop v0.9.5

16 Feb 05:12
Compare
Choose a tag to compare

What's Changed

Massive improvements in how retsnoop determines whether kprobes are attachable:

  • add --debug multi-kprobe mode to bisect failing multi-kprobe attachment; it quickly narrows down and logs which kprobes were attempted but failed to be attached;
  • skip attaching to kernel functions that have non-unique name and some of instances are not traceable;
  • resolve internal mix up of function and data ksyms;
  • internal fixes to consistently take into account kernel module to which ksym/kprobe belongs to.

Overall, these fixes and improvements make retsnoop's mass-attach behavior more reliable.

Full Changelog: v0.9.4...v0.9.5

retsnoop v0.9.4

07 Feb 05:15
Compare
Choose a tag to compare

Bug fixes

  • fix IP (instruction pointer) fetching on non-x86_64 architectures on older kernels;
  • handle io_uring source code files better, after Linux code reorganization;
  • automatically pick debugfs (/sys/kernel/debug/tracing) or tracefs (/sys/kernel/tracing), whichever is available;
  • handle very old kernels that don't support BPF global data more gracefully.

retsnoop v0.9.3

07 Nov 22:17
Compare
Choose a tag to compare

What's Changed

retsnoop now supports DWARF-based symbolization (i.e.,
source code file/line info and inline functions) on
KASLR-enabled Linux kernels.

retsnoop v0.9.2

21 Oct 21:22
Compare
Choose a tag to compare

What's Changed

  • -F (fentry/fexit) mode now supports tracing void-returning functions;
  • few fixes for -F (fentry/fexit) mode interacting weirdly with source code globs;
  • retsnoop now can be compiled across x86_64, i686, aarch64, ppc64le, s390x, riscv64 architectures by using per-architecture pre-generated minimal vmlinux.h (see gen-vmlinux-headers.sh script);
  • retsnoop now builds bootstrap (lightweight) version of bpftool from submodule, which allows it to be compilable on multiple-architectures. Previously retsnoop's Makefile relied on checked in pre-built x86_64 bpftool binary;
  • massive revamp of README.md;
  • usage text fixes and improvements.

Full Changelog: v0.9.1...v0.9.2

retsnoop v0.9.1

05 Oct 04:55
Compare
Choose a tag to compare

Few nice improvements with no major new features:

  • dropped the requirement for /proc/config.gz presence for multi-kprobe detection (just using BPF CO-RE now for detection);
  • use dynamically allocated internal formatting buffers for stacks and traces, thus allowing much larger traces without dropping any information (at the expense of more memory usage, of course);
  • force-flush stdout before (potentially very long) detachment to improve retsnoop usage in scripts;
  • emit detected features when printing version and --verbose flag is specified:
$ sudo ./retsnoop -Vv
retsnoop v0.9.1
Feature detection:
        BPF ringbuf map supported: yes
        bpf_get_func_ip() supported: yes
        bpf_get_branch_snapshot() supported: yes
        BPF cookie supported: yes
        multi-attach kprobe supported: yes
Feature calibration:
        kretprobe IP offset: 4
        fexit sleep fix: yes
        fentry re-entry protection: yes

All just nice quality of life improvements. Enjoy!