Concurrent threads can call openat independently. Entry arguments must be paired with the correct thread's return.
Return semantics
A nonnegative return is a descriptor, including zero. Negative values encode errors: -2 is ENOENT and -13 is EACCES. Neither result explains why the application selected the path.
Path context
A relative pathname is interpreted using dirfd or the current directory and the process filesystem view.
Start with a symptom and a prediction. A hook is useful when it answers a specific question.
01
Predict
Write down the event and identity fields you expect before running the observer.
02
Observe
Collect the real output. Inspect timestamps, identity, return values and the capture window.
03
Explain + bound
State what the evidence establishes, then name what it cannot tell you.
04
Transfer
Change one condition. Check whether your reasoning still holds.
The observation diagrams explain a specific measurement boundary. Selecting a received record displays its actual fields. Conceptual diagrams never imply a successful execution.
Labs 03–06 run in a disposable Linux VM. This learner release supports a macOS host with Lima 2.0 or newer and the pinned Ubuntu 24.04 x86_64 guest. The commands below run in a local clone of this repository.
HOST / GET THE REPOSITORY
git clone https://github.com/danielAsaboro/ebpf-incident-lab.git
cd ebpf-incident-lab
Download the pinned v0.1.1 learner bundle and check it against the repository’s published checksums.
./scripts/lab-vm.sh start
./scripts/lab-vm.sh doctor
./scripts/lab-vm.sh shell
Open a second host terminal and run the shell command again for the fixture. Inside the guest, observers run from native storage at /opt/incident-lab.
GUEST / CHECK THE ENVIRONMENT
incident-lab doctor
incident-lab list
Each local investigation contains its own observer and fixture commands. Nothing in this web interface runs shell commands on your machine. Paste actual output into the investigation to keep an explicitly unverified local record.
Stop preserves the VM.
After fieldwork, use ./scripts/lab-vm.sh stop on the host. Reset and delete are separate destructive operations with explicit terminal confirmations.
Received from the configured Linux runner. A successful run applies to that object, kernel and observation window.
Local output
Pasted by you and labeled user-provided. The application cannot independently verify its origin or execution.
Saved notebooks
Stored in this browser, including the output you record. They are historical notes, not a current live session. Delete individual notebooks from My notebooks.
Empty output
No matching event reached the observer. That does not establish that the incident never happened.
Conceptual models
Explain relationships. They are not actual process topology, physical kernel layouts, network measurements or verifier disassembly.
04
Follow the visible error
The hosted runner is not configured
This deployment has no configured runner credentials. The UI remains usable; use the local VM guides or a deployment with a configured runner.
No events appeared
Run the fixture after the observer reports ready. Check the capture duration and ensure --pid refers to a host PID.
Learner bundle checksum mismatch
Use the exact pinned archive and published checksum. The launcher will not silently download or rebuild a replacement.
A saved stream was interrupted
Returning to a notebook restores its notes and received events. It does not automatically restart a runner session. Return to your prediction to start another observation.
A diagram is unavailable
The raw evidence, lab content and notebook remain usable without a diagram or WebGL.
Uprobe symbol or attach failure
Use the fixture binary on the VM's native filesystem, not the macOS shared mount. Check the exact INCIDENT_DNS_FIXTURE path.