Commit Graph

2181 Commits (61e0aef8b6aafeafa80981dd962ffaa4392bc950)
 

Author SHA1 Message Date
Friday Ortiz 61e0aef8b6
.github,aya,test: clean up interface and script per review comments
- .github: Ensure we only download the debug package that matches the kernel we
  downloaded.
- aya: Constrain the breakpoint interface to only valid combinations of
  options.
- test: Document what the test is actually doing for future readers who might
  be unfamiliar with modprobe_path.
3 weeks ago
Friday Ortiz 38e3f7fce2
Merge branch 'main' into feature/breakpoint-support 3 weeks ago
Tyrone Wu 3d7fbaad28 aya: enforce valid perf_event type & config combos
Add guardrails for when setting event type and config for perf_event
programs. The `PerfEventConfig` enum now defines the event `type` and
`config` of interest.

Remove public re-exports, and add idiomatic Rust types for:
- perf_hw_id => HardwareEvent
- perf_sw_ids => SoftwareEvent
- perf_hw_cache_id => HwCacheEvent
- perf_hw_cache_op_id => HwCacheOp
- perf_hw_cache_op_result_id => HwCacheResult

The motivation behind this is mainly for the `type` and `config` fields
of `bpf_link_info.perf_event.event`. The newly added enums are planned
to also be used in the `bpf_link_info` metadata.

Although `Breakpoint`/`PERF_TYPE_BREAKPOINT` variant exists, it is not
fully implemented. It's only usage at the moment is in link info.
3 weeks ago
Tamir Duberstein 08cf90881f
integration-test: extract run_pin_program_lifecycle_test 3 weeks ago
Tamir Duberstein fe43f776c3
integration-test: extract from_pin 3 weeks ago
Tamir Duberstein 0840faf6b1
integration-test: extract pin paths 3 weeks ago
Tamir Duberstein 0f1c975632
integration-test: extract run_unload_program_test 3 weeks ago
Tamir Duberstein a6458804fc
integration-test: extract types 3 weeks ago
Tamir Duberstein a2f4951cce
integration-test: remove errant semicolons 3 weeks ago
Tamir Duberstein 89d746ad1b
integration-test: extract attach fns 3 weeks ago
Tamir Duberstein 48300b6498
integration-test: extract program names 3 weeks ago
Tamir Duberstein 4041fe9293
integration-test: move memmove out of pin tests 3 weeks ago
Tamir Duberstein c2fb7fed6c
Remove useless impl 3 weeks ago
Tamir Duberstein f76fdf9da5
Improve error output
- Use consistent casing.
- Emit syscall return value.
3 weeks ago
Tamir Duberstein 82aec26963
flow_dissector: add missing impl_try_into_fdlink 3 weeks ago
Tamir Duberstein 0cb52e850a
xtask: tolerate curl failure when possible
Codex sandbox forbids network access.
3 weeks ago
Tamir Duberstein 667790e103
xtask: avoid `git submodule update` when possible
`git submodule update` fails when running in a codex sandbox:

```
  error: could not lock config file /Users/tamird/src/aya/.git/modules/libbpf/config: Operation not permitted
```

so just avoid it when not necessary.
3 weeks ago
Tamir Duberstein 6fc06b9fcf
Remove unused error variant 3 weeks ago
Tamir Duberstein 4ce1e29804
clippy.sh: build for BPF after everything else
In cases where I run `./clippy.sh ... -p <crate>` I really want the
results for that crate to come quickly.
3 weeks ago
Tamir Duberstein 57a75dfd61
.vscode: always use linux in rust-analyzer 3 weeks ago
Christian A. Jacobsen a98b638fa9 feat(log): add support for logging raw pointer types
* Requires the usage of `:p` display hint.
* Will, like stdlib, log with `0x` prefix.
3 weeks ago
Friday Ortiz 4545feec9a
aya,test,xtask: add breakpoint support to enforced perf_event config combo branch
* aya: enforce valid perf_event type & config combos

Add guardrails for when setting event type and config for perf_event
programs. The `PerfEventConfig` enum now defines the event `type` and
`config` of interest.

Remove public re-exports, and add idiomatic Rust types for:
- perf_hw_id => HardwareEvent
- perf_sw_ids => SoftwareEvent
- perf_hw_cache_id => HwCacheEvent
- perf_hw_cache_op_id => HwCacheOp
- perf_hw_cache_op_result_id => HwCacheResult

The motivation behind this is mainly for the `type` and `config` fields
of `bpf_link_info.perf_event.event`. The newly added enums are planned
to also be used in the `bpf_link_info` metadata.

Although `Breakpoint`/`PERF_TYPE_BREAKPOINT` variant exists, it is not
fully implemented. It's only usage at the moment is in link info.

* add breakpoint support to perf_event config interface

---------

Co-authored-by: Tyrone Wu <wudevelops@gmail.com>
4 weeks ago
Friday Ortiz 22d6f58e9b
test: use gunzip symbol to determine kaslr offset
This symbol should appear in both kallsyms and System.map, whereas
the _text symbol does not.
4 weeks ago
Friday Ortiz c6718e7882
Merge branch 'main' into feature/breakpoint-support 4 weeks ago
Friday Ortiz 51d97a4303
test,xtask: include debug symbols for attaching breakpoints in tests
For some reason, the aarch64 6.1 debian kernel was not compiled with
CONFIG_KALLSYMS_ALL=y, and the locations of globals are not available in
kallsyms. To attach breakpoints to these symbols in the test pipeline, we need
to read them from System.map and apply the kaslr offset to get their real
address. The System.map file is not provided in the kernel package by default,
so we need to extract it from the corresponding debug package.

- .github: pull the corresponding debug packages down as well as regular
  kernels
- test: attach the perf_event_bp test breakpoint to the modprobe_path address
  in kallsyms if present, or by applying the kaslr offset to the System.map
  address if not found
- xtask: preferentially extract the System.map file from the debug package, if
  available
4 weeks ago
Friday Ortiz 8b58fc13fc
test: add a perf_event breakpoint test
Test perf_event breakpoints by attaching a RW breakpoint to
modprobe_path and triggering a read from procfs, asserting that the tgid
of the program triggering the breakpoint matches the test program.
4 weeks ago
Tamir Duberstein 29dc775535
test-distro: appease unreachable code check
See https://github.com/rust-lang/rust/commit/ff6dc928c5e33ce8e65c6911a7.
4 weeks ago
Friday Ortiz f7a9d73d42
aya-obj,aya,ebpf,xtask: support perf_event hardware breakpoints
- aya-obj: Generate userspace bindings for HW_BREAKPOINT_* options
- aya: Support PERF_TYPE_BREAKPOINT by adding an optional hardware
  breakpoint configuration to PerfEvent::attach() and perf_event_open
  functions.
- ebpf: Generate bindings for `struct bpf_perf_event_data` and update
  the PerfEventContext to use them instead of a void pointer.
- xtask: Update codegen for constified anonymous HW_BREAKPOINT_* enums
4 weeks ago
Altug Bozkurt fc5387c806
lsm: cgroup attachment type support 1 month ago
Tamir Duberstein 66ed37c8a9
integration-test: add LSM 1 month ago
Tamir Duberstein 8e75214815
feature_probe: properly check for LSM support
Turns out this is not supported in aarch64 until 6.4.
1 month ago
Tamir Duberstein 9ba87c661b
xtask: copy kernel config into the initramfs image
When preparing the VM initramfs detect the `config-*` file that ships alongside
the vmlinuz/modules in each kernel archive and install it under `/boot` (both
as `/boot/config` and `/boot/config-<version>`). This makes the running
kernel’s configuration available inside the guest for the integration tests.
1 month ago
Tamir Duberstein 5f046899b5
xtask: teach integration-test vm to consume kernel debs directly
Bundle handling of Debian kernel archives into xtask so callers can pipe
the raw `.deb` paths straight into `cargo xtask integration-test vm …`.
The driver now extracts each archive into `<cache>/kernel-archives`,
locates the matching `vmlinuz-*`, `lib/modules/*`, and config files, and
feeds those into the initramfs build without requiring the user to
pre-run dpkg/tar. With this in place we drop
`.github/scripts/find_kernels.py`, simplify AGENTS.md/CI instructions to
use `find test/.tmp -name '*.deb'`, remove the gnu-tar requirement we no
longer need, and add `tar` as a workspace dependency for the extractor.
1 month ago
Tamir Duberstein fab4fc44b2
xtask: reduce `fs` imports 1 month ago
Tamir Duberstein d16711b2be
xtask: avoid variables named `cmd` and `child` 1 month ago
Tamir Duberstein ffa65efb36
integration-ebpf: avoid mentioning the size 1 month ago
Tamir Duberstein d82ed60795
.cargo/config: use musl-cross on x86_64 as well
This allows us to run virtualized integration tests on macOS hosts.

Bump Ubuntu to 24.04 because we seem to be getting miscompilation on
x86_64 otherwise (when using `x86_64-linux-musl-gcc`). Add `apt install
liblzma-dev` since it doesn't seem to be present in ubuntu-24.04.
1 month ago
Tamir Duberstein 71f6176e24
xtask: ensure we actually built depmod 1 month ago
Tamir Duberstein 82750ae3b1
.github: attempt to enable KVM 1 month ago
Tamir Duberstein 9bc185a61e
aya-tool: simplify and improve error handling 1 month ago
Michal R 98e8c78376 aya-ebpf: Make use of `Borrow` and `BorrowMut` in map methods
Let callers pass either owned objects or references. We do that already
in the user-space methods.
1 month ago
Tamir Duberstein de42b80c74
aya,ebpf: add BPF_MAP_TYPE_SK_STORAGE
This map type requires BTF, and we can finally do it!
1 month ago
Tamir Duberstein 6babf17969
maps: use shared helpers 1 month ago
Tamir Duberstein c9b5f119a3
feature_probe: clarify composite logic 1 month ago
Tamir Duberstein 75edc3d294
*: downcase log strings 1 month ago
Tamir Duberstein 742f700dcc
maps: add newline between doc and imports 1 month ago
Tamir Duberstein 0013ff4e9e
ebpf: use null pointers at runtime
The values here do not matter, this is just to get type information.
1 month ago
Tamir Duberstein 275c5b6bbc
ebpf: use `ptr::from_ref`
This is consistent with other such conversions.
1 month ago
Tamir Duberstein a2324e6e50
Add Brewfile 1 month ago
Tamir Duberstein b73b9092ee
Add AGENTS.md 1 month ago