Commit Graph

257 Commits (9f711e44fe063438d8dc49a044ed737e8286bd0e)

Author SHA1 Message Date
Alessandro Decina 6316748ec1
Merge pull request #179 from dave-tucker/btf_datasec_name
btf: Replace / in DATASEC before load to kernel
3 years ago
Alessandro Decina f169a3fc6b aya: fix func_info/line_info offsets
Given the new start instruction offset, rebase func_infos and
line_infos.
3 years ago
Alessandro Decina 8202105b7d aya: relocate .text references
Handle relocations against .text symbols in all instructions not just
calls. Makes it so that let x = &some_function triggers linking of
some_function in the current program and handles the resulting
relocation accordingly.

Among other things, enables the use of bpf_for_each_map_elem.
3 years ago
Dave Tucker 825bb3ad20 btf: Replace / in DATASEC before load to kernel
This replaces the / character with a . which is allowed in the kernel
names. Not allowing a forward slash is perhaps a kernel bug, but lets
fix it up here as it's commonly used for Aya

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 99fa85eab8 btf: fix match arms
Don't match on kind and use if let...
Match on the BtfType

Fixes: #178

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 326825aab0 tests: add a test for each BTF fix
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Alessandro Decina 4efc2061a8 btf: fix borrow check errors 3 years ago
Dave Tucker a1b46ece05 aya: Merge Fixup and Sanitzation to single step
Aya will now perform sanitzation and fixups in a single phase, requiring
only one pass over the BTF. This modifies the parsed BTF in place.

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 5d8b279265 aya: Fix BTF verifier output
Currently errors can occur if the verifier output is > buffer as we get
ENOMEM. We should only provide a log_buf if initial load failed, then
retry up to 10 times to get full verifier output.

To DRY this logic it has been moved to a function so its shared with
program loading

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>

one verifier loop to rule them all

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker d9496df3a7
Merge pull request #173 from alessandrod/func-proto-fixup
Add fixup for FuncProto
3 years ago
Alessandro Decina 7ad0524283 btf: fix sanitization if BTF_FUNC_GLOBAL is not supported
The lower 16 bits were not actually being cleared.
3 years ago
Alessandro Decina 9ba2e147a1 btf: fixup func protos
If an argument has a type, it must also have a name, see btf_func_check
in the kernel.

Given:

SEC("lsm/syslog")
int BPF_PROG(syslog_audit, int type, int ret_prev)
{
        return 0;
}

Fixes:

error: BTF error: the BPF_BTF_LOAD syscall failed. Verifier output: magic: 0xeb9f
version: 1
flags: 0x0
hdr_len: 24
type_off: 0
type_len: 76
str_off: 76
str_len: 128
btf_total_size: 228
[1] FUNC_PROTO (anon) return=2 args=(3 (anon))
[2] INT int size=4 bits_offset=0 nr_bits=32 encoding=SIGNED
[3] PTR (anon) type_id=4
[4] INT long long unsigned int size=8 bits_offset=0 nr_bits=64 encoding=(none)
[5] FUNC syslog_audit type_id=1
[5] FUNC syslog_audit type_id=1 Invalid arg#1
: Invalid argument (os error 22)
3 years ago
Alessandro Decina 89b5dd32ed btf: run fixup in place 3 years ago
Alessandro Decina b45a160bb0
Merge pull request #168 from dave-tucker/decl_tag
btf: Add support for BTF_TYPE_KIND_{TAG,DECL_TAG}
3 years ago
Dave Tucker 8f9a32ff10 aya: Fix name truncation
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 437432cdd6 aya: Truncate long program names
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 5d9ff70498 btf: Add support for BTF_TYPE_KIND_{TAG,DECL_TAG}
Adds support for two new BTF kinds including feature probes and BTF
sanitization

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Alessandro Decina 1492d85a7b
Merge pull request #169 from dave-tucker/fix_array_relo
aya: Fix BTF type resolution for Arrays and Ints
3 years ago
Alessandro Decina 6a91fdf5a7
Merge pull request #157 from dave-tucker/doc-aya
aya: document the public api
3 years ago
Dave Tucker 686ce45f93 aya: Fix BTF type resolution for Arrays and Ints
The union of `size` and `type` is unused in BTF_KIND_ARRAY.
Type information of elements is in the btf_array struct that follows in
the type_ field while the index type is in the index_type field.

For BTF_KIND_INT, only the offset should be compared and size and
signedness should be ignored.

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
dave-tucker 324c679a41 Update libbpf to be89b28f96be426e30a2b0c5312d13b30ee518c7 3 years ago
Alessandro Decina 4e9bc32a3d aya: maps: rename from_pinned() to open_pinned() 3 years ago
Alessandro Decina f12054a00d
Merge pull request #165 from dave-tucker/prog_pinned
aya: Retrieve program from pinned path
3 years ago
Dave Tucker abc8d27440 aya: Retrieve program from pinned path
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
dave-tucker 0619f80090 Update libbpf to 22411acc4b2c846868fd570b2d9f3b016d2af2cb 3 years ago
Dave Tucker 83cfe56fe7 aya: allocate func/line_info buffers outside if
the pointer isn't valid in the current code!

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker bca01580e7 aya: document the public api
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 877c76043a btf: Add fixup for PTR types from Rust
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 5c6131afba Add BPF_PROG_TYPE_EXT
This requires loading the BTF to kernel when loading all programs as
well as implementing Extension program type

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 379bb313b1 obj: Add Btf::to_bytes
This allows for parsed BTF to be re-encoded such that it could be loaded
in to the kernel. It moves bytes_of to the utils package. We could use
Object::bytes_of, but this requires the impl of the Pod trait on
generated code.

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 65a0b83205 Mark .rodata maps as readonly and freeze on load
This commit marks .rodata maps as BPF_F_RDONLY_PROG when loaded to
prevent a BPF program mutating them.

Initial map data is populated by the loader using the new
`BpfLoader::set_global()` API. The loader will mark
is marked as frozen using bpf_map_freeze to prevent map data
being changed from userspace.

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 2b7dda766f btf: Fix for rename of BPF_ -> BPF_CORE_
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
dave-tucker 05d4bc39ea Update libbpf to 19656636a9b9a2de1f71fa3135709295c16701cc 3 years ago
Michal Rostecki 7e2fcd1d6d Support for fentry and fexit programs
fentry and fexit programs are similar to kprobe and kretprobe, but they
are newer and they have practically zero overhead to call before or
after kernel function. Also, fexit programs are focused on access to
arguments rather than the return value.

Those kind of programs were introduced in the following patchset:

https://lwn.net/Articles/804112/

Signed-off-by: Michal Rostecki <mrostecki@opensuse.org>
3 years ago
dependabot[bot] 54b0c67795 build(deps): update object requirement from 0.27 to 0.28
Updates the requirements on [object](https://github.com/gimli-rs/object) to permit the latest version.
- [Release notes](https://github.com/gimli-rs/object/releases)
- [Changelog](https://github.com/gimli-rs/object/blob/master/CHANGELOG.md)
- [Commits](https://github.com/gimli-rs/object/compare/0.27.0...0.28.1)

---
updated-dependencies:
- dependency-name: object
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
3 years ago
Ubuntu 24a292f605 Implement Pod for u128 3 years ago
dave-tucker 17d43cd6f8 Update libbpf to 93e89b34740c509406e948c78a404dd2fba67b8b 3 years ago
Alessandro Decina 26d188c659
Merge pull request #125 from dave-tucker/btf
obj: Improve section detection
3 years ago
Thia Wyrod 18970369e2
aya: Remove unnecessary unsafe markers on map iteration.
Map iteration can yield stale keys and values by virtue of sharing a
data structure with BPF programs which can modify it. However, all
accesses remain perfectly safe and will not cause memory corruption or
data races.
3 years ago
Alessandro Decina 07a6016ebb
Merge pull request #120 from eero-thia/thia/dedup
aya: eliminate name duplication in maps and programs.
3 years ago
Thia Wyrod f56dd0a70b
aya: eliminate name duplication in maps and programs.
Map and ProgramData objects had unnecessarily cloned strings for their
names, despite them being just as easily available to external users via
bpf.maps() and bpf.programs().
3 years ago
Will bb8a813eef aya: use correct program name when relocating 3 years ago
Dave Tucker e4d9774bf7 obj: Improve section detection
This commit improves section detection.
Previously, a section named "xdp_metadata" would be interpretted as a
program section, which is incorrect. This commit first attempts to
identify a BPF section by name, then by section.kind() ==
SectionKind::Text (executable code). The computed section kind is
stored in the Section so variants can be easily matched on later.

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Thia Wyrod daa7ea6d0d
aya: remove unnecessary usage of &dyn trait in favor of impl trait.
This should improve performance in most situations by eliminating
unnecessary fat pointer indirection.
3 years ago
Alessandro Decina 98b36b23bc
Merge pull request #116 from eero-thia/thia/close
aya: close file descriptors on Map drop.
3 years ago
Alessandro Decina 2955ca1d1f
Merge pull request #121 from eero-thia/thia/programs_mut
aya: programs_mut iterator to complement programs.
3 years ago
Thia Wyrod c7f8db9a0b
aya: programs_mut iterator to complement programs. 3 years ago
Thia Wyrod 1584bc47bd
aya: close file descriptors on Map drop. 3 years ago
Thia Wyrod f8f17a09fb
aya: expand include_bytes_aligned to accept expressions.
This allows one to this macro with literal expressions involving macros
such as concat! and env!.
3 years ago
Alessandro Decina 6db30fad9c
Merge pull request #108 from deverton/kprobe-debugfs
Support k/uprobes on older kernels.
3 years ago