Probe Reference
Overview
This document describes each eBPF probe used for runtime evidence collection: its attach point, why it exists, what kind of data it captures, and its known limitations. It is an altitude reference — it gives the shape of each probe and its event, not a field-by-field transcription. Exact struct layouts, field names, and sizes live in the authoritative sources below and are kept in sync there; when this page and the source disagree, the source wins.
Authoritative sources
| What | Where |
|---|---|
On-the-wire event structs (header + one struct per event type, all sizes/MAX_* constants) | src/Signals/__Libraries/StellaOps.Signals.Ebpf/Probes/Bpf/stella_common.h |
| Per-probe BPF programs (attach points, filtering, capture logic) | src/Signals/__Libraries/StellaOps.Signals.Ebpf/Probes/Bpf/*.bpf.c |
| User-space NDJSON event shape and field semantics | evidence-schema.md → docs/schemas/runtime-evidence-v1.json |
| Kernel/BTF version requirements (deployment matrix) | deployment-guide.md |
| Ring buffer, component architecture, CO-RE/BTF source selection | ebpf-architecture.md |
Collector options (RingBufferSize, MaxEventsPerSecond, etc.) | src/Signals/__Libraries/StellaOps.Signals.Ebpf/Services/IRuntimeSignalCollector.cs |
Every event begins with a common event_header (timestamp, pid/tid, cgroup_id, event-type discriminator, comm); the per-probe notes below describe only the fields that are specific to that probe. See stella_common.h for both the header and each event struct.
Tracepoint Probes
sys_enter_openat
Attach point: tracepoint/syscalls/sys_enter_openat Purpose: Capture file access operations to prove which files were read or written. Kernel requirement: 2.6.16+ (openat syscall), 4.14+ for eBPF attachment. Source: Probes/Bpf/syscall_openat.bpf.c (event: file_open_event in stella_common.h)
Captured shape: the directory fd, open flags, file mode, and the resolved filename, on top of the common header.
Filtering:
- Cgroup-based: only capture events from targeted containers.
- Path-based: in-kernel
/proc,/sys,/devand read-only filters (see theconfigmap in the source); broader allow/deny patterns applied in user space.
Fallback: for kernels without openat (pre-2.6.16), attaches to sys_enter_open instead (same event struct, dfd set to the AT_FDCWD value).
Performance impact: ~1-2% CPU at 10,000 opens/second.
sched_process_exec
Attach point: tracepoint/sched/sched_process_exec Purpose: Capture process execution to prove which binaries were invoked. Kernel requirement: 3.4+ for tracepoint, 4.14+ for eBPF attachment. Source: Probes/Bpf/syscall_exec.bpf.c (event: process_exec_event in stella_common.h)
Captured shape: parent pid, executed binary path, and the first argument (argv0), on top of the common header.
Argv capture:
- Argument capture is bounded for verifier safety; reads use
bpf_probe_read_user_str()with bounds checking and truncation. See the source for the current per-arg and arg-count limits.
Interpreter detection:
- Recognizes shebangs for Python, Node, Ruby, and shell scripts, mapping e.g.
/usr/bin/python script.pyto the script path.
Performance impact: minimal (exec rate is typically low).
inet_sock_set_state
Attach point: tracepoint/sock/inet_sock_set_state Purpose: Capture TCP connection lifecycle to prove network communication patterns. Kernel requirement: 4.16+ (tracepoint added), BTF recommended for CO-RE. Source: Probes/Bpf/syscall_network.bpf.c (event: tcp_state_event in stella_common.h)
Captured shape: old/new TCP state, address family, source/destination ports, and source/destination addresses (a v4/v6 union), on top of the common header.
State transition filtering:
- Default: only
* -> ESTABLISHEDand* -> CLOSE. - Configurable: all transitions for debugging.
Address formatting (user space):
- IPv4 as dotted decimal (e.g.,
192.168.1.1); IPv6 as RFC 5952 compressed (e.g.,2001:db8::1).
Performance impact: ~1% CPU at high connection rate.
Uprobe Probes
libc connect/accept
Attach points: uprobe/uretprobe on connect, and uprobe on accept/accept4, in libc. Purpose: Capture network operations at the libc level as an alternative to kernel tracepoints. Library support: glibc (libc.so.6) and musl (libc.musl-*.so.1). Source: Probes/Bpf/uprobe_libc.bpf.c (event: net_connect_event in stella_common.h)
Captured shape: socket fd, address family, remote address/port, and the syscall return value (captured on the uretprobe), on top of the common header.
Library path resolution:
- Parse
/etc/ld.so.cachefor library locations. - Fall back to common paths (
/lib/x86_64-linux-gnu/, etc.). - Handle container-specific paths via
/proc/{pid}/root.
Byte counting (optional): read/write uprobes track bytes per file descriptor, aggregated to prevent an event flood.
OpenSSL SSL_read/SSL_write
Attach points: uprobe/uretprobe on SSL_read and SSL_write in libssl. Purpose: Capture TLS traffic volumes without decryption. Library support: OpenSSL 1.1.x (libssl.so.1.1) and 3.x (libssl.so.3); LibreSSL best-effort; BoringSSL limited. Source: Probes/Bpf/uprobe_openssl.bpf.c (event: ssl_op_event in stella_common.h)
Captured shape: operation (read/write), requested vs. actual byte counts (actual captured on the uretprobe), and the SSL* pointer for correlation, on top of the common header.
Session correlation: ssl_ptr can be correlated with SSL_get_fd for socket mapping; optionally SSL_get_peer_certificate for peer info.
Byte aggregation: high-throughput connections aggregate to periodic summaries to prevent an event flood on bulk transfer.
Function Tracer (Generic)
Attach point: uprobe/{binary}:{symbol} — arbitrary function symbols. Purpose: Attach to arbitrary function symbols for custom evidence. Source: Probes/Bpf/function_tracer.bpf.c (event: function_call_event in stella_common.h)
Captured shape: runtime address and a symbol identifier (resolved against a BPF map), plus call-stack context, on top of the common header.
Symbol resolution: user space resolves the runtime address to a symbol via ELF tables, applying the ASLR offset from /proc/{pid}/maps; results are cached.
Kernel Version Compatibility
The per-probe Kernel requirement lines above are version floors summarized for narrative; the authoritative attach points are the SEC(...) declarations in each Probes/Bpf/*.bpf.c. For the deployment-facing minimum/recommended kernel and BTF requirements, see deployment-guide.md (and the CO-RE/BTF source-selection details in ebpf-architecture.md).
Known Limitations
Tracepoints
- sys_enter_openat: path may be relative; resolution requires a dfd lookup.
- sched_process_exec: argv reading limited by verifier complexity.
- inet_sock_set_state: UDP not covered; use a kprobe for UDP if needed.
Uprobes
- Library resolution: may fail for statically linked binaries.
- musl libc: some symbol names differ from glibc.
- OpenSSL: version detection required for correct symbol names.
- Stripped binaries: uprobes require symbol tables.
General
- eBPF verifier: complex programs may be rejected.
- Container namespaces: paths may differ from the host view.
- High event rate: ring buffer overflow is possible under extreme load.
Troubleshooting
Probe Failed to Attach
Error: Failed to attach tracepoint/syscalls/sys_enter_openat
- Check the kernel version supports the tracepoint (see deployment-guide.md).
- Verify eBPF is enabled (
CONFIG_BPF=y,CONFIG_BPF_SYSCALL=y). - Check permissions (CAP_BPF or root required).
Missing BTF
Error: BTF not found for kernel version
- Install the kernel BTF package (
linux-image-*-dbgon Debian/Ubuntu). - Use BTFHub for external BTF files.
- Fall back to pre-compiled probes for a specific kernel.
Ring Buffer Overflow
Warning: Ring buffer full, events dropped
- Increase the ring buffer size or lower the event ceiling via the collector options (
RingBufferSize,MaxEventsPerSecondinsrc/Signals/__Libraries/StellaOps.Signals.Ebpf/Services/IRuntimeSignalCollector.cs). - Enable more aggressive filtering (cgroup/path/state-transition).
Related
- Evidence Schema — the NDJSON event shape each probe produces
- Operator Runbook — attach failures, BTF, and configuration
- Security Model — kernel-level trust boundaries
- eBPF Reachability overview
