From f0a9f19ddc7f02143a02dcc2bf6be88fa2d84063 Mon Sep 17 00:00:00 2001 From: Tamir Duberstein Date: Mon, 3 Mar 2025 10:59:11 -0500 Subject: [PATCH] Bump edition to 2024 Change FromRawTracepointArgs::arg to return T rather than *const T which seems to have been returning a dangling pointer. Arguably this is not strictly necessary; edition 2024 seems to be focused on increased strictness around unsafe code which doesn't unlock new functionality for our users. That said, this work revealed an apparent bug (see above) that we wouldn't otherwise catch due to allow-by-default lints. --- Cargo.toml | 3 +- aya-build/Cargo.toml | 1 + aya-build/src/lib.rs | 2 +- aya-ebpf-macros/Cargo.toml | 1 + aya-ebpf-macros/src/args.rs | 2 +- aya-ebpf-macros/src/btf_tracepoint.rs | 14 ++-- aya-ebpf-macros/src/cgroup_device.rs | 10 +-- aya-ebpf-macros/src/cgroup_skb.rs | 28 +++---- aya-ebpf-macros/src/cgroup_sock.rs | 22 ++--- aya-ebpf-macros/src/cgroup_sock_addr.rs | 54 ++++++------ aya-ebpf-macros/src/cgroup_sockopt.rs | 14 ++-- aya-ebpf-macros/src/cgroup_sysctl.rs | 10 +-- aya-ebpf-macros/src/fentry.rs | 16 ++-- aya-ebpf-macros/src/fexit.rs | 16 ++-- aya-ebpf-macros/src/kprobe.rs | 22 ++--- aya-ebpf-macros/src/lsm.rs | 12 +-- aya-ebpf-macros/src/map.rs | 12 +-- aya-ebpf-macros/src/perf_event.rs | 10 +-- aya-ebpf-macros/src/raw_tracepoint.rs | 8 +- aya-ebpf-macros/src/sk_lookup.rs | 10 +-- aya-ebpf-macros/src/sk_msg.rs | 10 +-- aya-ebpf-macros/src/sk_skb.rs | 14 ++-- aya-ebpf-macros/src/sock_ops.rs | 10 +-- aya-ebpf-macros/src/socket_filter.rs | 10 +-- aya-ebpf-macros/src/tc.rs | 10 +-- aya-ebpf-macros/src/tracepoint.rs | 10 +-- aya-ebpf-macros/src/uprobe.rs | 26 +++--- aya-ebpf-macros/src/xdp.rs | 34 ++++---- aya-log-common/Cargo.toml | 1 + aya-log-ebpf-macros/Cargo.toml | 1 + aya-log-ebpf-macros/src/expand.rs | 8 +- aya-log-parser/Cargo.toml | 1 + aya-log/Cargo.toml | 1 + aya-log/src/lib.rs | 14 ++-- aya-obj/Cargo.toml | 1 + aya-obj/src/btf/btf.rs | 14 ++-- aya-obj/src/btf/info.rs | 2 +- aya-obj/src/btf/relocation.rs | 32 +++++--- aya-obj/src/btf/types.rs | 4 +- .../src/generated/linux_bindings_aarch64.rs | 6 +- aya-obj/src/generated/linux_bindings_armv7.rs | 6 +- aya-obj/src/generated/linux_bindings_mips.rs | 6 +- .../src/generated/linux_bindings_powerpc64.rs | 6 +- .../src/generated/linux_bindings_riscv64.rs | 6 +- aya-obj/src/generated/linux_bindings_s390x.rs | 6 +- .../src/generated/linux_bindings_x86_64.rs | 6 +- aya-obj/src/lib.rs | 8 +- aya-obj/src/links.rs | 2 +- aya-obj/src/obj.rs | 26 +++--- aya-obj/src/programs/types.rs | 2 +- aya-obj/src/relocation.rs | 10 ++- aya-obj/src/util.rs | 4 +- aya-tool/Cargo.toml | 1 + aya-tool/src/bin/aya-tool.rs | 2 +- aya-tool/src/lib.rs | 4 +- aya/BREAKING-CHANGES.md | 12 +++ aya/Cargo.toml | 2 +- aya/src/bpf.rs | 22 ++--- aya/src/lib.rs | 6 +- aya/src/maps/array/array.rs | 4 +- aya/src/maps/array/per_cpu_array.rs | 4 +- aya/src/maps/array/program_array.rs | 4 +- aya/src/maps/bloom_filter.rs | 8 +- aya/src/maps/hash_map/hash_map.rs | 8 +- aya/src/maps/hash_map/mod.rs | 4 +- aya/src/maps/hash_map/per_cpu_hash_map.rs | 10 +-- aya/src/maps/info.rs | 6 +- aya/src/maps/lpm_trie.rs | 8 +- aya/src/maps/mod.rs | 27 +++--- aya/src/maps/perf/async_perf_event_array.rs | 2 +- aya/src/maps/perf/perf_buffer.rs | 4 +- aya/src/maps/perf/perf_event_array.rs | 2 +- aya/src/maps/queue.rs | 4 +- aya/src/maps/ring_buf.rs | 8 +- aya/src/maps/sock/sock_hash.rs | 8 +- aya/src/maps/sock/sock_map.rs | 4 +- aya/src/maps/stack.rs | 4 +- aya/src/maps/stack_trace.rs | 2 +- aya/src/maps/xdp/cpu_map.rs | 6 +- aya/src/maps/xdp/dev_map.rs | 6 +- aya/src/maps/xdp/dev_map_hash.rs | 8 +- aya/src/maps/xdp/xsk_map.rs | 4 +- aya/src/programs/cgroup_device.rs | 4 +- aya/src/programs/cgroup_skb.rs | 8 +- aya/src/programs/cgroup_sock.rs | 8 +- aya/src/programs/cgroup_sock_addr.rs | 8 +- aya/src/programs/cgroup_sockopt.rs | 8 +- aya/src/programs/cgroup_sysctl.rs | 6 +- aya/src/programs/extension.rs | 6 +- aya/src/programs/fentry.rs | 4 +- aya/src/programs/fexit.rs | 4 +- aya/src/programs/info.rs | 6 +- aya/src/programs/iter.rs | 6 +- aya/src/programs/kprobe.rs | 7 +- aya/src/programs/links.rs | 6 +- aya/src/programs/lirc_mode2.rs | 6 +- aya/src/programs/lsm.rs | 4 +- aya/src/programs/mod.rs | 14 ++-- aya/src/programs/perf_attach.rs | 11 ++- aya/src/programs/perf_event.rs | 4 +- aya/src/programs/probe.rs | 8 +- aya/src/programs/raw_trace_point.rs | 4 +- aya/src/programs/sk_lookup.rs | 4 +- aya/src/programs/sk_msg.rs | 4 +- aya/src/programs/sk_skb.rs | 6 +- aya/src/programs/sock_ops.rs | 6 +- aya/src/programs/socket_filter.rs | 6 +- aya/src/programs/tc.rs | 18 ++-- aya/src/programs/tp_btf.rs | 4 +- aya/src/programs/trace_point.rs | 9 +- aya/src/programs/uprobe.rs | 11 ++- aya/src/programs/utils.rs | 2 +- aya/src/programs/xdp.rs | 14 ++-- aya/src/sys/bpf.rs | 20 ++--- aya/src/sys/mod.rs | 14 ++-- aya/src/sys/netlink.rs | 47 +++++------ aya/src/sys/perf_event.rs | 7 +- aya/src/util.rs | 6 +- ebpf/aya-ebpf-bindings/build.rs | 4 +- .../aya-ebpf-bindings/src/aarch64/bindings.rs | 6 +- ebpf/aya-ebpf-bindings/src/armv7/bindings.rs | 6 +- ebpf/aya-ebpf-bindings/src/lib.rs | 29 +++---- ebpf/aya-ebpf-bindings/src/mips/bindings.rs | 6 +- .../src/powerpc64/bindings.rs | 6 +- .../aya-ebpf-bindings/src/riscv64/bindings.rs | 6 +- ebpf/aya-ebpf-bindings/src/s390x/bindings.rs | 6 +- ebpf/aya-ebpf-bindings/src/x86_64/bindings.rs | 6 +- ebpf/aya-ebpf-cty/Cargo.toml | 1 + ebpf/aya-ebpf-cty/build.rs | 4 +- ebpf/aya-ebpf/Cargo.toml | 1 + ebpf/aya-ebpf/build.rs | 4 +- ebpf/aya-ebpf/src/args.rs | 14 ++-- ebpf/aya-ebpf/src/helpers.rs | 82 +++++++------------ ebpf/aya-ebpf/src/lib.rs | 16 ++-- ebpf/aya-ebpf/src/maps/hash_map.rs | 10 +-- .../src/maps/perf/perf_event_array.rs | 4 +- .../src/maps/perf/perf_event_byte_array.rs | 4 +- ebpf/aya-ebpf/src/maps/program_array.rs | 10 +-- ebpf/aya-ebpf/src/maps/ring_buf.rs | 6 +- ebpf/aya-ebpf/src/maps/sock_hash.rs | 2 +- ebpf/aya-ebpf/src/maps/sock_map.rs | 33 ++------ ebpf/aya-ebpf/src/maps/stack_trace.rs | 10 +-- ebpf/aya-ebpf/src/programs/device.rs | 2 +- ebpf/aya-ebpf/src/programs/fentry.rs | 4 +- ebpf/aya-ebpf/src/programs/fexit.rs | 4 +- ebpf/aya-ebpf/src/programs/lsm.rs | 4 +- ebpf/aya-ebpf/src/programs/probe.rs | 2 +- ebpf/aya-ebpf/src/programs/raw_tracepoint.rs | 10 +-- ebpf/aya-ebpf/src/programs/retprobe.rs | 2 +- ebpf/aya-ebpf/src/programs/sk_buff.rs | 58 +++---------- ebpf/aya-ebpf/src/programs/sk_lookup.rs | 2 +- ebpf/aya-ebpf/src/programs/sk_msg.rs | 14 +--- ebpf/aya-ebpf/src/programs/sock.rs | 2 +- ebpf/aya-ebpf/src/programs/sock_addr.rs | 2 +- ebpf/aya-ebpf/src/programs/sock_ops.rs | 8 +- ebpf/aya-ebpf/src/programs/sockopt.rs | 2 +- ebpf/aya-ebpf/src/programs/sysctl.rs | 2 +- ebpf/aya-ebpf/src/programs/tc.rs | 4 +- ebpf/aya-ebpf/src/programs/tp_btf.rs | 4 +- ebpf/aya-ebpf/src/programs/tracepoint.rs | 4 +- ebpf/aya-ebpf/src/programs/xdp.rs | 2 +- ebpf/aya-log-ebpf/Cargo.toml | 1 + ebpf/aya-log-ebpf/src/lib.rs | 10 +-- init/Cargo.toml | 1 + test/integration-common/Cargo.toml | 1 + test/integration-ebpf/Cargo.toml | 1 + test/integration-ebpf/src/bpf_probe_read.rs | 2 +- test/integration-ebpf/src/memmove_test.rs | 2 +- test/integration-ebpf/src/uprobe_cookie.rs | 3 +- test/integration-test/Cargo.toml | 1 + test/integration-test/build.rs | 4 +- .../src/tests/bpf_probe_read.rs | 8 +- .../src/tests/btf_relocations.rs | 8 +- test/integration-test/src/tests/info.rs | 10 ++- test/integration-test/src/tests/iter.rs | 2 +- test/integration-test/src/tests/load.rs | 13 +-- test/integration-test/src/tests/log.rs | 4 +- .../src/tests/raw_tracepoint.rs | 2 +- test/integration-test/src/tests/rbpf.rs | 2 +- .../integration-test/src/tests/relocations.rs | 8 +- test/integration-test/src/tests/ring_buf.rs | 12 +-- test/integration-test/src/tests/smoke.rs | 6 +- test/integration-test/src/tests/strncmp.rs | 6 +- test/integration-test/src/tests/tcx.rs | 4 +- .../src/tests/uprobe_cookie.rs | 6 +- test/integration-test/src/tests/xdp.rs | 2 +- test/integration-test/src/utils.rs | 2 +- xtask/Cargo.toml | 1 + xtask/public-api/aya-ebpf.txt | 4 +- xtask/src/codegen/aya_ebpf_bindings.rs | 4 +- xtask/src/codegen/helpers.rs | 8 +- xtask/src/lib.rs | 2 +- xtask/src/main.rs | 2 +- xtask/src/public_api.rs | 8 +- xtask/src/run.rs | 6 +- 195 files changed, 768 insertions(+), 864 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 7e9bc6e9..f0290906 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -52,7 +52,8 @@ authors = ["Aya Contributors"] license = "MIT OR Apache-2.0" repository = "https://github.com/aya-rs/aya" homepage = "https://aya-rs.dev" -edition = "2021" +rust-version = "1.85.0" +edition = "2024" # NOTE(vadorovsky): Neither cargo-udeps nor cargo-machete are able to detect # unused crates defined in this section. It would be nice to teach either of diff --git a/aya-build/Cargo.toml b/aya-build/Cargo.toml index d35d895c..563ef1ab 100644 --- a/aya-build/Cargo.toml +++ b/aya-build/Cargo.toml @@ -6,6 +6,7 @@ authors.workspace = true license.workspace = true repository.workspace = true homepage.workspace = true +rust-version.workspace = true edition.workspace = true [dependencies] diff --git a/aya-build/src/lib.rs b/aya-build/src/lib.rs index 4bf8ffcc..310a30ac 100644 --- a/aya-build/src/lib.rs +++ b/aya-build/src/lib.rs @@ -5,7 +5,7 @@ use std::{ process::{Child, Command, Stdio}, }; -use anyhow::{anyhow, Context as _, Result}; +use anyhow::{Context as _, Result, anyhow}; // Re-export `cargo_metadata` to having to encode the version downstream and risk mismatches. pub use cargo_metadata; use cargo_metadata::{Artifact, CompilerMessage, Message, Package, Target}; diff --git a/aya-ebpf-macros/Cargo.toml b/aya-ebpf-macros/Cargo.toml index e4a64b8b..57d14dc5 100644 --- a/aya-ebpf-macros/Cargo.toml +++ b/aya-ebpf-macros/Cargo.toml @@ -6,6 +6,7 @@ authors.workspace = true license.workspace = true repository.workspace = true homepage.workspace = true +rust-version.workspace = true edition.workspace = true [lib] diff --git a/aya-ebpf-macros/src/args.rs b/aya-ebpf-macros/src/args.rs index 12ed84d1..decc48b9 100644 --- a/aya-ebpf-macros/src/args.rs +++ b/aya-ebpf-macros/src/args.rs @@ -1,7 +1,7 @@ use syn::{ + Error, Ident, LitStr, Result, Token, parse::{Parse, ParseStream}, punctuated::{Pair, Punctuated}, - Error, Ident, LitStr, Result, Token, }; pub(crate) struct NameValue { diff --git a/aya-ebpf-macros/src/btf_tracepoint.rs b/aya-ebpf-macros/src/btf_tracepoint.rs index da9f280d..65d1fb4f 100644 --- a/aya-ebpf-macros/src/btf_tracepoint.rs +++ b/aya-ebpf-macros/src/btf_tracepoint.rs @@ -4,7 +4,7 @@ use proc_macro2::TokenStream; use quote::quote; use syn::{ItemFn, Result}; -use crate::args::{err_on_unknown_args, pop_string_arg, Args}; +use crate::args::{Args, err_on_unknown_args, pop_string_arg}; pub(crate) struct BtfTracePoint { item: ItemFn, @@ -36,8 +36,8 @@ impl BtfTracePoint { }; let fn_name = &sig.ident; quote! { - #[no_mangle] - #[link_section = #section_name] + #[unsafe(no_mangle)] + #[unsafe(link_section = #section_name)] #vis fn #fn_name(ctx: *mut ::core::ffi::c_void) -> i32 { let _ = #fn_name(::aya_ebpf::programs::BtfTracePointContext::new(ctx)); return 0; @@ -67,8 +67,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote!( - #[no_mangle] - #[link_section = "tp_btf"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "tp_btf")] fn foo(ctx: *mut ::core::ffi::c_void) -> i32 { let _ = foo(::aya_ebpf::programs::BtfTracePointContext::new(ctx)); return 0; @@ -94,8 +94,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote!( - #[no_mangle] - #[link_section = "tp_btf/some_func"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "tp_btf/some_func")] fn foo(ctx: *mut ::core::ffi::c_void) -> i32 { let _ = foo(::aya_ebpf::programs::BtfTracePointContext::new(ctx)); return 0; diff --git a/aya-ebpf-macros/src/cgroup_device.rs b/aya-ebpf-macros/src/cgroup_device.rs index 4e2f9b65..9a888d0b 100644 --- a/aya-ebpf-macros/src/cgroup_device.rs +++ b/aya-ebpf-macros/src/cgroup_device.rs @@ -1,7 +1,7 @@ use proc_macro2::TokenStream; use proc_macro2_diagnostics::{Diagnostic, SpanDiagnosticExt as _}; use quote::quote; -use syn::{spanned::Spanned as _, ItemFn}; +use syn::{ItemFn, spanned::Spanned as _}; pub(crate) struct CgroupDevice { item: ItemFn, @@ -26,8 +26,8 @@ impl CgroupDevice { } = item; let fn_name = &sig.ident; quote! { - #[no_mangle] - #[link_section = "cgroup/dev"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/dev")] #vis fn #fn_name(ctx: *mut ::aya_ebpf::bindings::bpf_cgroup_dev_ctx) -> i32 { return #fn_name(::aya_ebpf::programs::DeviceContext::new(ctx)); @@ -56,8 +56,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup/dev"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/dev")] fn foo(ctx: *mut ::aya_ebpf::bindings::bpf_cgroup_dev_ctx) -> i32 { return foo(::aya_ebpf::programs::DeviceContext::new(ctx)); diff --git a/aya-ebpf-macros/src/cgroup_skb.rs b/aya-ebpf-macros/src/cgroup_skb.rs index 357d77d7..89dbc5c5 100644 --- a/aya-ebpf-macros/src/cgroup_skb.rs +++ b/aya-ebpf-macros/src/cgroup_skb.rs @@ -39,8 +39,8 @@ impl CgroupSkb { }; let fn_name = &sig.ident; quote! { - #[no_mangle] - #[link_section = #section_name] + #[unsafe(no_mangle)] + #[unsafe(link_section = #section_name)] #vis fn #fn_name(ctx: *mut ::aya_ebpf::bindings::__sk_buff) -> i32 { return #fn_name(::aya_ebpf::programs::SkBuffContext::new(ctx)); @@ -69,8 +69,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup/skb"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/skb")] fn foo(ctx: *mut ::aya_ebpf::bindings::__sk_buff) -> i32 { return foo(::aya_ebpf::programs::SkBuffContext::new(ctx)); @@ -95,8 +95,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup_skb/egress"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup_skb/egress")] fn foo(ctx: *mut ::aya_ebpf::bindings::__sk_buff) -> i32 { return foo(::aya_ebpf::programs::SkBuffContext::new(ctx)); @@ -121,8 +121,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup_skb/ingress"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup_skb/ingress")] fn foo(ctx: *mut ::aya_ebpf::bindings::__sk_buff) -> i32 { return foo(::aya_ebpf::programs::SkBuffContext::new(ctx)); @@ -147,8 +147,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup_skb/egress"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup_skb/egress")] fn foo(ctx: *mut ::aya_ebpf::bindings::__sk_buff) -> i32 { return foo(::aya_ebpf::programs::SkBuffContext::new(ctx)); @@ -173,8 +173,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup_skb/egress"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup_skb/egress")] pub fn foo(ctx: *mut ::aya_ebpf::bindings::__sk_buff) -> i32 { return foo(::aya_ebpf::programs::SkBuffContext::new(ctx)); @@ -199,8 +199,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup_skb/egress"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup_skb/egress")] pub(crate) fn foo(ctx: *mut ::aya_ebpf::bindings::__sk_buff) -> i32 { return foo(::aya_ebpf::programs::SkBuffContext::new(ctx)); diff --git a/aya-ebpf-macros/src/cgroup_sock.rs b/aya-ebpf-macros/src/cgroup_sock.rs index 29f443f2..951f12d7 100644 --- a/aya-ebpf-macros/src/cgroup_sock.rs +++ b/aya-ebpf-macros/src/cgroup_sock.rs @@ -3,7 +3,7 @@ use std::borrow::Cow; use proc_macro2::TokenStream; use proc_macro2_diagnostics::{Diagnostic, SpanDiagnosticExt as _}; use quote::quote; -use syn::{spanned::Spanned as _, Ident, ItemFn}; +use syn::{Ident, ItemFn, spanned::Spanned as _}; pub(crate) struct CgroupSock { item: ItemFn, @@ -38,8 +38,8 @@ impl CgroupSock { let section_name: Cow<'_, _> = format!("cgroup/{attach_type}").into(); let fn_name = &sig.ident; quote! { - #[no_mangle] - #[link_section = #section_name] + #[unsafe(no_mangle)] + #[unsafe(link_section = #section_name)] #vis fn #fn_name(ctx: *mut ::aya_ebpf::bindings::bpf_sock) -> i32 { return #fn_name(::aya_ebpf::programs::SockContext::new(ctx)); @@ -68,8 +68,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup/post_bind4"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/post_bind4")] fn foo(ctx: *mut ::aya_ebpf::bindings::bpf_sock) -> i32 { return foo(::aya_ebpf::programs::SockContext::new(ctx)); @@ -94,8 +94,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup/post_bind6"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/post_bind6")] fn foo(ctx: *mut ::aya_ebpf::bindings::bpf_sock) -> i32 { return foo(::aya_ebpf::programs::SockContext::new(ctx)); @@ -119,8 +119,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup/sock_create"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/sock_create")] fn foo(ctx: *mut ::aya_ebpf::bindings::bpf_sock) -> i32 { return foo(::aya_ebpf::programs::SockContext::new(ctx)); @@ -144,8 +144,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup/sock_release"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/sock_release")] fn foo(ctx: *mut ::aya_ebpf::bindings::bpf_sock) -> i32 { return foo(::aya_ebpf::programs::SockContext::new(ctx)); diff --git a/aya-ebpf-macros/src/cgroup_sock_addr.rs b/aya-ebpf-macros/src/cgroup_sock_addr.rs index 55cc4b2f..edede565 100644 --- a/aya-ebpf-macros/src/cgroup_sock_addr.rs +++ b/aya-ebpf-macros/src/cgroup_sock_addr.rs @@ -3,7 +3,7 @@ use std::borrow::Cow; use proc_macro2::TokenStream; use proc_macro2_diagnostics::{Diagnostic, SpanDiagnosticExt as _}; use quote::quote; -use syn::{spanned::Spanned as _, Ident, ItemFn}; +use syn::{Ident, ItemFn, spanned::Spanned as _}; pub(crate) struct CgroupSockAddr { item: ItemFn, @@ -46,8 +46,8 @@ impl CgroupSockAddr { let section_name: Cow<'_, _> = format!("cgroup/{attach_type}").into(); let fn_name = &sig.ident; quote! { - #[no_mangle] - #[link_section = #section_name] + #[unsafe(no_mangle)] + #[unsafe(link_section = #section_name)] #vis fn #fn_name(ctx: *mut ::aya_ebpf::bindings::bpf_sock_addr) -> i32 { return #fn_name(::aya_ebpf::programs::SockAddrContext::new(ctx)); @@ -76,8 +76,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup/connect4"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/connect4")] fn foo(ctx: *mut ::aya_ebpf::bindings::bpf_sock_addr) -> i32 { return foo(::aya_ebpf::programs::SockAddrContext::new(ctx)); @@ -102,8 +102,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup/connect6"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/connect6")] fn foo(ctx: *mut ::aya_ebpf::bindings::bpf_sock_addr) -> i32 { return foo(::aya_ebpf::programs::SockAddrContext::new(ctx)); @@ -128,8 +128,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup/bind4"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/bind4")] fn foo(ctx: *mut ::aya_ebpf::bindings::bpf_sock_addr) -> i32 { return foo(::aya_ebpf::programs::SockAddrContext::new(ctx)); @@ -154,8 +154,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup/bind6"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/bind6")] fn foo(ctx: *mut ::aya_ebpf::bindings::bpf_sock_addr) -> i32 { return foo(::aya_ebpf::programs::SockAddrContext::new(ctx)); @@ -180,8 +180,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup/getpeername4"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/getpeername4")] fn foo(ctx: *mut ::aya_ebpf::bindings::bpf_sock_addr) -> i32 { return foo(::aya_ebpf::programs::SockAddrContext::new(ctx)); @@ -206,8 +206,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup/getpeername6"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/getpeername6")] fn foo(ctx: *mut ::aya_ebpf::bindings::bpf_sock_addr) -> i32 { return foo(::aya_ebpf::programs::SockAddrContext::new(ctx)); @@ -232,8 +232,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup/getsockname4"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/getsockname4")] fn foo(ctx: *mut ::aya_ebpf::bindings::bpf_sock_addr) -> i32 { return foo(::aya_ebpf::programs::SockAddrContext::new(ctx)); @@ -258,8 +258,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup/getsockname6"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/getsockname6")] fn foo(ctx: *mut ::aya_ebpf::bindings::bpf_sock_addr) -> i32 { return foo(::aya_ebpf::programs::SockAddrContext::new(ctx)); @@ -284,8 +284,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup/sendmsg4"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/sendmsg4")] fn foo(ctx: *mut ::aya_ebpf::bindings::bpf_sock_addr) -> i32 { return foo(::aya_ebpf::programs::SockAddrContext::new(ctx)); @@ -310,8 +310,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup/sendmsg6"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/sendmsg6")] fn foo(ctx: *mut ::aya_ebpf::bindings::bpf_sock_addr) -> i32 { return foo(::aya_ebpf::programs::SockAddrContext::new(ctx)); @@ -336,8 +336,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup/recvmsg4"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/recvmsg4")] fn foo(ctx: *mut ::aya_ebpf::bindings::bpf_sock_addr) -> i32 { return foo(::aya_ebpf::programs::SockAddrContext::new(ctx)); @@ -362,8 +362,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup/recvmsg6"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/recvmsg6")] fn foo(ctx: *mut ::aya_ebpf::bindings::bpf_sock_addr) -> i32 { return foo(::aya_ebpf::programs::SockAddrContext::new(ctx)); diff --git a/aya-ebpf-macros/src/cgroup_sockopt.rs b/aya-ebpf-macros/src/cgroup_sockopt.rs index 7be16646..33ce92f5 100644 --- a/aya-ebpf-macros/src/cgroup_sockopt.rs +++ b/aya-ebpf-macros/src/cgroup_sockopt.rs @@ -3,7 +3,7 @@ use std::borrow::Cow; use proc_macro2::TokenStream; use proc_macro2_diagnostics::{Diagnostic, SpanDiagnosticExt as _}; use quote::quote; -use syn::{spanned::Spanned as _, Ident, ItemFn}; +use syn::{Ident, ItemFn, spanned::Spanned as _}; pub(crate) struct CgroupSockopt { item: ItemFn, @@ -37,8 +37,8 @@ impl CgroupSockopt { let section_name: Cow<'_, _> = format!("cgroup/{attach_type}").into(); let fn_name = &sig.ident; quote! { - #[no_mangle] - #[link_section = #section_name] + #[unsafe(no_mangle)] + #[unsafe(link_section = #section_name)] #vis fn #fn_name(ctx: *mut ::aya_ebpf::bindings::bpf_sockopt) -> i32 { return #fn_name(::aya_ebpf::programs::SockoptContext::new(ctx)); @@ -67,8 +67,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote!( - #[no_mangle] - #[link_section = "cgroup/getsockopt"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/getsockopt")] fn foo(ctx: *mut ::aya_ebpf::bindings::bpf_sockopt) -> i32 { return foo(::aya_ebpf::programs::SockoptContext::new(ctx)); @@ -93,8 +93,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote!( - #[no_mangle] - #[link_section = "cgroup/setsockopt"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/setsockopt")] fn foo(ctx: *mut ::aya_ebpf::bindings::bpf_sockopt) -> i32 { return foo(::aya_ebpf::programs::SockoptContext::new(ctx)); diff --git a/aya-ebpf-macros/src/cgroup_sysctl.rs b/aya-ebpf-macros/src/cgroup_sysctl.rs index e3039102..0ff1b82f 100644 --- a/aya-ebpf-macros/src/cgroup_sysctl.rs +++ b/aya-ebpf-macros/src/cgroup_sysctl.rs @@ -1,7 +1,7 @@ use proc_macro2::TokenStream; use proc_macro2_diagnostics::{Diagnostic, SpanDiagnosticExt as _}; use quote::quote; -use syn::{spanned::Spanned as _, ItemFn}; +use syn::{ItemFn, spanned::Spanned as _}; pub(crate) struct CgroupSysctl { item: ItemFn, @@ -26,8 +26,8 @@ impl CgroupSysctl { } = item; let fn_name = &sig.ident; quote! { - #[no_mangle] - #[link_section = "cgroup/sysctl"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/sysctl")] #vis fn #fn_name(ctx: *mut ::aya_ebpf::bindings::bpf_sysctl) -> i32 { return #fn_name(::aya_ebpf::programs::SysctlContext::new(ctx)); @@ -56,8 +56,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "cgroup/sysctl"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "cgroup/sysctl")] fn foo(ctx: *mut ::aya_ebpf::bindings::bpf_sysctl) -> i32 { return foo(::aya_ebpf::programs::SysctlContext::new(ctx)); diff --git a/aya-ebpf-macros/src/fentry.rs b/aya-ebpf-macros/src/fentry.rs index ab497546..7aaca5d2 100644 --- a/aya-ebpf-macros/src/fentry.rs +++ b/aya-ebpf-macros/src/fentry.rs @@ -46,8 +46,8 @@ impl FEntry { }; let fn_name = &sig.ident; quote! { - #[no_mangle] - #[link_section = #section_name] + #[unsafe(no_mangle)] + #[unsafe(link_section = #section_name)] #vis fn #fn_name(ctx: *mut ::core::ffi::c_void) -> i32 { let _ = #fn_name(::aya_ebpf::programs::FEntryContext::new(ctx)); return 0; @@ -77,8 +77,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "fentry"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "fentry")] fn sys_clone(ctx: *mut ::core::ffi::c_void) -> i32 { let _ = sys_clone(::aya_ebpf::programs::FEntryContext::new(ctx)); return 0; @@ -106,8 +106,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "fentry/sys_clone"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "fentry/sys_clone")] fn sys_clone(ctx: *mut ::core::ffi::c_void) -> i32 { let _ = sys_clone(::aya_ebpf::programs::FEntryContext::new(ctx)); return 0; @@ -135,8 +135,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "fentry.s"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "fentry.s")] fn sys_clone(ctx: *mut ::core::ffi::c_void) -> i32 { let _ = sys_clone(::aya_ebpf::programs::FEntryContext::new(ctx)); return 0; diff --git a/aya-ebpf-macros/src/fexit.rs b/aya-ebpf-macros/src/fexit.rs index 4bda9aee..8b958477 100644 --- a/aya-ebpf-macros/src/fexit.rs +++ b/aya-ebpf-macros/src/fexit.rs @@ -46,8 +46,8 @@ impl FExit { }; let fn_name = &sig.ident; quote! { - #[no_mangle] - #[link_section = #section_name] + #[unsafe(no_mangle)] + #[unsafe(link_section = #section_name)] #vis fn #fn_name(ctx: *mut ::core::ffi::c_void) -> i32 { let _ = #fn_name(::aya_ebpf::programs::FExitContext::new(ctx)); return 0; @@ -77,8 +77,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "fexit"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "fexit")] fn sys_clone(ctx: *mut ::core::ffi::c_void) -> i32 { let _ = sys_clone(::aya_ebpf::programs::FExitContext::new(ctx)); return 0; @@ -106,8 +106,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "fexit/sys_clone"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "fexit/sys_clone")] fn sys_clone(ctx: *mut ::core::ffi::c_void) -> i32 { let _ = sys_clone(::aya_ebpf::programs::FExitContext::new(ctx)); return 0; @@ -135,8 +135,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "fexit.s/sys_clone"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "fexit.s/sys_clone")] fn sys_clone(ctx: *mut ::core::ffi::c_void) -> i32 { let _ = sys_clone(::aya_ebpf::programs::FExitContext::new(ctx)); return 0; diff --git a/aya-ebpf-macros/src/kprobe.rs b/aya-ebpf-macros/src/kprobe.rs index 7af980ed..a46382f3 100644 --- a/aya-ebpf-macros/src/kprobe.rs +++ b/aya-ebpf-macros/src/kprobe.rs @@ -3,7 +3,7 @@ use std::borrow::Cow; use proc_macro2::TokenStream; use proc_macro2_diagnostics::{Diagnostic, SpanDiagnosticExt as _}; use quote::quote; -use syn::{spanned::Spanned as _, ItemFn}; +use syn::{ItemFn, spanned::Spanned as _}; use crate::args::{err_on_unknown_args, pop_string_arg}; @@ -82,8 +82,8 @@ impl KProbe { }; let fn_name = &sig.ident; quote! { - #[no_mangle] - #[link_section = #section_name] + #[unsafe(no_mangle)] + #[unsafe(link_section = #section_name)] #vis fn #fn_name(ctx: *mut ::core::ffi::c_void) -> u32 { let _ = #fn_name(::aya_ebpf::programs::#probe_type::new(ctx)); return 0; @@ -115,8 +115,8 @@ mod tests { assert_eq!( kprobe.expand().to_string(), quote! { - #[no_mangle] - #[link_section = "kprobe"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "kprobe")] fn foo(ctx: *mut ::core::ffi::c_void) -> u32 { let _ = foo(::aya_ebpf::programs::ProbeContext::new(ctx)); return 0; @@ -147,8 +147,8 @@ mod tests { assert_eq!( kprobe.expand().to_string(), quote! { - #[no_mangle] - #[link_section = "kprobe/fib_lookup"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "kprobe/fib_lookup")] fn foo(ctx: *mut ::core::ffi::c_void) -> u32 { let _ = foo(::aya_ebpf::programs::ProbeContext::new(ctx)); return 0; @@ -180,8 +180,8 @@ mod tests { assert_eq!( kprobe.expand().to_string(), quote! { - #[no_mangle] - #[link_section = "kprobe/fib_lookup+10"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "kprobe/fib_lookup+10")] fn foo(ctx: *mut ::core::ffi::c_void) -> u32 { let _ = foo(::aya_ebpf::programs::ProbeContext::new(ctx)); return 0; @@ -210,8 +210,8 @@ mod tests { assert_eq!( kprobe.expand().to_string(), quote! { - #[no_mangle] - #[link_section = "kretprobe"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "kretprobe")] fn foo(ctx: *mut ::core::ffi::c_void) -> u32 { let _ = foo(::aya_ebpf::programs::RetProbeContext::new(ctx)); return 0; diff --git a/aya-ebpf-macros/src/lsm.rs b/aya-ebpf-macros/src/lsm.rs index 2eb53dcd..e5c530c4 100644 --- a/aya-ebpf-macros/src/lsm.rs +++ b/aya-ebpf-macros/src/lsm.rs @@ -49,8 +49,8 @@ impl Lsm { // of 0 as in other program types. let fn_name = &sig.ident; quote! { - #[no_mangle] - #[link_section = #section_name] + #[unsafe(no_mangle)] + #[unsafe(link_section = #section_name)] #vis fn #fn_name(ctx: *mut ::core::ffi::c_void) -> i32 { return #fn_name(::aya_ebpf::programs::LsmContext::new(ctx)); @@ -82,8 +82,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "lsm.s/bprm_committed_creds"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "lsm.s/bprm_committed_creds")] fn bprm_committed_creds(ctx: *mut ::core::ffi::c_void) -> i32 { return bprm_committed_creds(::aya_ebpf::programs::LsmContext::new(ctx)); @@ -110,8 +110,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "lsm/bprm_committed_creds"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "lsm/bprm_committed_creds")] fn bprm_committed_creds(ctx: *mut ::core::ffi::c_void) -> i32 { return bprm_committed_creds(::aya_ebpf::programs::LsmContext::new(ctx)); diff --git a/aya-ebpf-macros/src/map.rs b/aya-ebpf-macros/src/map.rs index 9c85ab87..189e0e07 100644 --- a/aya-ebpf-macros/src/map.rs +++ b/aya-ebpf-macros/src/map.rs @@ -23,8 +23,8 @@ impl Map { let name = &self.name; let item = &self.item; quote! { - #[link_section = #section_name] - #[export_name = #name] + #[unsafe(link_section = #section_name)] + #[unsafe(export_name = #name)] #item } } @@ -47,8 +47,8 @@ mod tests { .unwrap(); let expanded = map.expand(); let expected = quote!( - #[link_section = "maps"] - #[export_name = "foo"] + #[unsafe(link_section = "maps")] + #[unsafe(export_name = "foo")] static BAR: HashMap<&'static str, u32> = HashMap::new(); ); assert_eq!(expected.to_string(), expanded.to_string()); @@ -65,8 +65,8 @@ mod tests { .unwrap(); let expanded = map.expand(); let expected = quote!( - #[link_section = "maps"] - #[export_name = "BAR"] + #[unsafe(link_section = "maps")] + #[unsafe(export_name = "BAR")] static BAR: HashMap<&'static str, u32> = HashMap::new(); ); assert_eq!(expected.to_string(), expanded.to_string()); diff --git a/aya-ebpf-macros/src/perf_event.rs b/aya-ebpf-macros/src/perf_event.rs index 6abf511c..6b693f5a 100644 --- a/aya-ebpf-macros/src/perf_event.rs +++ b/aya-ebpf-macros/src/perf_event.rs @@ -1,7 +1,7 @@ use proc_macro2::TokenStream; use proc_macro2_diagnostics::{Diagnostic, SpanDiagnosticExt as _}; use quote::quote; -use syn::{spanned::Spanned as _, ItemFn}; +use syn::{ItemFn, spanned::Spanned as _}; pub(crate) struct PerfEvent { item: ItemFn, @@ -26,8 +26,8 @@ impl PerfEvent { } = item; let fn_name = &sig.ident; quote! { - #[no_mangle] - #[link_section = "perf_event"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "perf_event")] #vis fn #fn_name(ctx: *mut ::core::ffi::c_void) -> u32 { let _ = #fn_name(::aya_ebpf::programs::PerfEventContext::new(ctx)); return 0; @@ -57,8 +57,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "perf_event"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "perf_event")] fn foo(ctx: *mut ::core::ffi::c_void) -> u32 { let _ = foo(::aya_ebpf::programs::PerfEventContext::new(ctx)); return 0; diff --git a/aya-ebpf-macros/src/raw_tracepoint.rs b/aya-ebpf-macros/src/raw_tracepoint.rs index 8883a60b..b0c5c103 100644 --- a/aya-ebpf-macros/src/raw_tracepoint.rs +++ b/aya-ebpf-macros/src/raw_tracepoint.rs @@ -35,8 +35,8 @@ impl RawTracePoint { }; let fn_name = &sig.ident; quote! { - #[no_mangle] - #[link_section = #section_name] + #[unsafe(no_mangle)] + #[unsafe(link_section = #section_name)] #vis fn #fn_name(ctx: *mut ::core::ffi::c_void) -> u32 { let _ = #fn_name(::aya_ebpf::programs::RawTracePointContext::new(ctx)); return 0; @@ -66,8 +66,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "raw_tp/sys_enter"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "raw_tp/sys_enter")] fn prog(ctx: *mut ::core::ffi::c_void) -> u32 { let _ = prog(::aya_ebpf::programs::RawTracePointContext::new(ctx)); return 0; diff --git a/aya-ebpf-macros/src/sk_lookup.rs b/aya-ebpf-macros/src/sk_lookup.rs index f45dcefe..699d4b43 100644 --- a/aya-ebpf-macros/src/sk_lookup.rs +++ b/aya-ebpf-macros/src/sk_lookup.rs @@ -1,7 +1,7 @@ use proc_macro2::TokenStream; use proc_macro2_diagnostics::{Diagnostic, SpanDiagnosticExt as _}; use quote::quote; -use syn::{spanned::Spanned as _, ItemFn}; +use syn::{ItemFn, spanned::Spanned as _}; pub(crate) struct SkLookup { item: ItemFn, @@ -26,8 +26,8 @@ impl SkLookup { } = item; let fn_name = &sig.ident; quote! { - #[no_mangle] - #[link_section = "sk_lookup"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "sk_lookup")] #vis fn #fn_name(ctx: *mut ::aya_ebpf::bindings::bpf_sk_lookup) -> u32 { return #fn_name(::aya_ebpf::programs::SkLookupContext::new(ctx)); @@ -56,8 +56,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "sk_lookup"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "sk_lookup")] fn prog(ctx: *mut ::aya_ebpf::bindings::bpf_sk_lookup) -> u32 { return prog(::aya_ebpf::programs::SkLookupContext::new(ctx)); diff --git a/aya-ebpf-macros/src/sk_msg.rs b/aya-ebpf-macros/src/sk_msg.rs index 9d1ba669..32100ff2 100644 --- a/aya-ebpf-macros/src/sk_msg.rs +++ b/aya-ebpf-macros/src/sk_msg.rs @@ -1,7 +1,7 @@ use proc_macro2::TokenStream; use proc_macro2_diagnostics::{Diagnostic, SpanDiagnosticExt as _}; use quote::quote; -use syn::{spanned::Spanned as _, ItemFn}; +use syn::{ItemFn, spanned::Spanned as _}; pub(crate) struct SkMsg { item: ItemFn, @@ -26,8 +26,8 @@ impl SkMsg { } = item; let fn_name = &sig.ident; quote! { - #[no_mangle] - #[link_section = "sk_msg"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "sk_msg")] #vis fn #fn_name(ctx: *mut ::aya_ebpf::bindings::sk_msg_md) -> u32 { return #fn_name(::aya_ebpf::programs::SkMsgContext::new(ctx)); @@ -56,8 +56,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "sk_msg"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "sk_msg")] fn prog(ctx: *mut ::aya_ebpf::bindings:: sk_msg_md) -> u32 { return prog(::aya_ebpf::programs::SkMsgContext::new(ctx)); diff --git a/aya-ebpf-macros/src/sk_skb.rs b/aya-ebpf-macros/src/sk_skb.rs index d1898eec..4117c4e9 100644 --- a/aya-ebpf-macros/src/sk_skb.rs +++ b/aya-ebpf-macros/src/sk_skb.rs @@ -3,7 +3,7 @@ use std::borrow::Cow; use proc_macro2::TokenStream; use proc_macro2_diagnostics::{Diagnostic, SpanDiagnosticExt as _}; use quote::quote; -use syn::{spanned::Spanned as _, ItemFn}; +use syn::{ItemFn, spanned::Spanned as _}; #[derive(Debug, Copy, Clone)] pub(crate) enum SkSkbKind { @@ -50,8 +50,8 @@ impl SkSkb { let section_name: Cow<'_, _> = format!("sk_skb/{kind}").into(); let fn_name = &sig.ident; quote! { - #[no_mangle] - #[link_section = #section_name] + #[unsafe(no_mangle)] + #[unsafe(link_section = #section_name)] #vis fn #fn_name(ctx: *mut ::aya_ebpf::bindings::__sk_buff) -> u32 { return #fn_name(::aya_ebpf::programs::SkBuffContext::new(ctx)); @@ -81,8 +81,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "sk_skb/stream_parser"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "sk_skb/stream_parser")] fn prog(ctx: *mut ::aya_ebpf::bindings::__sk_buff) -> u32 { return prog(::aya_ebpf::programs::SkBuffContext::new(ctx)); @@ -108,8 +108,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "sk_skb/stream_verdict"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "sk_skb/stream_verdict")] fn prog(ctx: *mut ::aya_ebpf::bindings::__sk_buff) -> u32 { return prog(::aya_ebpf::programs::SkBuffContext::new(ctx)); diff --git a/aya-ebpf-macros/src/sock_ops.rs b/aya-ebpf-macros/src/sock_ops.rs index a268746c..f16b0585 100644 --- a/aya-ebpf-macros/src/sock_ops.rs +++ b/aya-ebpf-macros/src/sock_ops.rs @@ -1,7 +1,7 @@ use proc_macro2::TokenStream; use proc_macro2_diagnostics::{Diagnostic, SpanDiagnosticExt as _}; use quote::quote; -use syn::{spanned::Spanned as _, ItemFn}; +use syn::{ItemFn, spanned::Spanned as _}; pub(crate) struct SockOps { item: ItemFn, @@ -26,8 +26,8 @@ impl SockOps { } = item; let fn_name = &sig.ident; quote! { - #[no_mangle] - #[link_section = "sockops"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "sockops")] #vis fn #fn_name(ctx: *mut ::aya_ebpf::bindings::bpf_sock_ops) -> u32 { return #fn_name(::aya_ebpf::programs::SockOpsContext::new(ctx)); @@ -56,8 +56,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "sockops"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "sockops")] fn prog(ctx: *mut ::aya_ebpf::bindings::bpf_sock_ops) -> u32 { return prog(::aya_ebpf::programs::SockOpsContext::new(ctx)); diff --git a/aya-ebpf-macros/src/socket_filter.rs b/aya-ebpf-macros/src/socket_filter.rs index b45bd993..dc50551b 100644 --- a/aya-ebpf-macros/src/socket_filter.rs +++ b/aya-ebpf-macros/src/socket_filter.rs @@ -1,7 +1,7 @@ use proc_macro2::TokenStream; use proc_macro2_diagnostics::{Diagnostic, SpanDiagnosticExt as _}; use quote::quote; -use syn::{spanned::Spanned as _, ItemFn}; +use syn::{ItemFn, spanned::Spanned as _}; pub(crate) struct SocketFilter { item: ItemFn, @@ -26,8 +26,8 @@ impl SocketFilter { } = item; let fn_name = &sig.ident; quote! { - #[no_mangle] - #[link_section = "socket"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "socket")] #vis fn #fn_name(ctx: *mut ::aya_ebpf::bindings::__sk_buff) -> i64 { return #fn_name(::aya_ebpf::programs::SkBuffContext::new(ctx)); @@ -56,8 +56,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "socket"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "socket")] fn prog(ctx: *mut ::aya_ebpf::bindings::__sk_buff) -> i64 { return prog(::aya_ebpf::programs::SkBuffContext::new(ctx)); diff --git a/aya-ebpf-macros/src/tc.rs b/aya-ebpf-macros/src/tc.rs index 85157f1a..d6989a4b 100644 --- a/aya-ebpf-macros/src/tc.rs +++ b/aya-ebpf-macros/src/tc.rs @@ -1,7 +1,7 @@ use proc_macro2::TokenStream; use proc_macro2_diagnostics::{Diagnostic, SpanDiagnosticExt as _}; use quote::quote; -use syn::{spanned::Spanned as _, ItemFn}; +use syn::{ItemFn, spanned::Spanned as _}; pub(crate) struct SchedClassifier { item: ItemFn, @@ -26,8 +26,8 @@ impl SchedClassifier { } = item; let fn_name = &sig.ident; quote! { - #[no_mangle] - #[link_section = "classifier"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "classifier")] #vis fn #fn_name(ctx: *mut ::aya_ebpf::bindings::__sk_buff) -> i32 { return #fn_name(::aya_ebpf::programs::TcContext::new(ctx)); @@ -56,8 +56,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "classifier"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "classifier")] fn prog(ctx: *mut ::aya_ebpf::bindings::__sk_buff) -> i32 { return prog(::aya_ebpf::programs::TcContext::new(ctx)); diff --git a/aya-ebpf-macros/src/tracepoint.rs b/aya-ebpf-macros/src/tracepoint.rs index d972766e..bdedc956 100644 --- a/aya-ebpf-macros/src/tracepoint.rs +++ b/aya-ebpf-macros/src/tracepoint.rs @@ -3,7 +3,7 @@ use std::borrow::Cow; use proc_macro2::TokenStream; use proc_macro2_diagnostics::{Diagnostic, SpanDiagnosticExt as _}; use quote::quote; -use syn::{spanned::Spanned as _, ItemFn}; +use syn::{ItemFn, spanned::Spanned as _}; use crate::args::{err_on_unknown_args, pop_string_arg}; @@ -50,8 +50,8 @@ impl TracePoint { } = item; let fn_name = &sig.ident; quote! { - #[no_mangle] - #[link_section = #section_name] + #[unsafe(no_mangle)] + #[unsafe(link_section = #section_name)] #vis fn #fn_name(ctx: *mut ::core::ffi::c_void) -> u32 { let _ = #fn_name(::aya_ebpf::programs::TracePointContext::new(ctx)); return 0; @@ -81,8 +81,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "tracepoint/syscalls/sys_enter_bind"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "tracepoint/syscalls/sys_enter_bind")] fn prog(ctx: *mut ::core::ffi::c_void) -> u32 { let _ = prog(::aya_ebpf::programs::TracePointContext::new(ctx)); return 0; diff --git a/aya-ebpf-macros/src/uprobe.rs b/aya-ebpf-macros/src/uprobe.rs index a3f5a8ac..1453f99f 100644 --- a/aya-ebpf-macros/src/uprobe.rs +++ b/aya-ebpf-macros/src/uprobe.rs @@ -3,7 +3,7 @@ use std::borrow::Cow; use proc_macro2::TokenStream; use proc_macro2_diagnostics::{Diagnostic, SpanDiagnosticExt as _}; use quote::quote; -use syn::{spanned::Spanned as _, ItemFn}; +use syn::{ItemFn, spanned::Spanned as _}; use crate::args::{err_on_unknown_args, pop_bool_arg, pop_string_arg}; @@ -101,8 +101,8 @@ impl UProbe { }; let fn_name = &sig.ident; Ok(quote! { - #[no_mangle] - #[link_section = #section_name] + #[unsafe(no_mangle)] + #[unsafe(link_section = #section_name)] #vis fn #fn_name(ctx: *mut ::core::ffi::c_void) -> u32 { let _ = #fn_name(::aya_ebpf::programs::#probe_type::new(ctx)); return 0; @@ -134,8 +134,8 @@ mod tests { assert_eq!( uprobe.expand().unwrap().to_string(), quote! { - #[no_mangle] - #[link_section = "uprobe"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "uprobe")] fn foo(ctx: *mut ::core::ffi::c_void) -> u32 { let _ = foo(::aya_ebpf::programs::ProbeContext::new(ctx)); return 0; @@ -164,8 +164,8 @@ mod tests { assert_eq!( uprobe.expand().unwrap().to_string(), quote! { - #[no_mangle] - #[link_section = "uprobe.s"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "uprobe.s")] fn foo(ctx: *mut ::core::ffi::c_void) -> u32 { let _ = foo(::aya_ebpf::programs::ProbeContext::new(ctx)); return 0; @@ -197,8 +197,8 @@ mod tests { assert_eq!( uprobe.expand().unwrap().to_string(), quote! { - #[no_mangle] - #[link_section = "uprobe/self/proc/exe:trigger_uprobe"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "uprobe/self/proc/exe:trigger_uprobe")] fn foo(ctx: *mut ::core::ffi::c_void) -> u32 { let _ = foo(::aya_ebpf::programs::ProbeContext::new(ctx)); return 0; @@ -229,8 +229,8 @@ mod tests { assert_eq!( uprobe.expand().unwrap().to_string(), quote! { - #[no_mangle] - #[link_section = "uprobe/self/proc/exe:foo+123"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "uprobe/self/proc/exe:foo+123")] fn foo(ctx: *mut ::core::ffi::c_void) -> u32 { let _ = foo(::aya_ebpf::programs::ProbeContext::new(ctx)); return 0; @@ -259,8 +259,8 @@ mod tests { assert_eq!( uprobe.expand().unwrap().to_string(), quote! { - #[no_mangle] - #[link_section = "uretprobe"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "uretprobe")] fn foo(ctx: *mut ::core::ffi::c_void) -> u32 { let _ = foo(::aya_ebpf::programs::RetProbeContext::new(ctx)); return 0; diff --git a/aya-ebpf-macros/src/xdp.rs b/aya-ebpf-macros/src/xdp.rs index dde8b906..e71b6f21 100644 --- a/aya-ebpf-macros/src/xdp.rs +++ b/aya-ebpf-macros/src/xdp.rs @@ -1,9 +1,9 @@ use proc_macro2::TokenStream; use proc_macro2_diagnostics::{Diagnostic, SpanDiagnosticExt as _}; use quote::quote; -use syn::{spanned::Spanned as _, ItemFn}; +use syn::{ItemFn, spanned::Spanned as _}; -use crate::args::{err_on_unknown_args, pop_bool_arg, pop_string_arg, Args}; +use crate::args::{Args, err_on_unknown_args, pop_bool_arg, pop_string_arg}; pub(crate) struct Xdp { item: ItemFn, @@ -30,7 +30,7 @@ impl Xdp { Some(name) => { return Err(span.error(format!( "Invalid value. Expected 'cpumap' or 'devmap', found '{name}'" - ))) + ))); } None => None, }; @@ -56,8 +56,8 @@ impl Xdp { let section_name = section_name.join("/"); let fn_name = &sig.ident; quote! { - #[no_mangle] - #[link_section = #section_name] + #[unsafe(no_mangle)] + #[unsafe(link_section = #section_name)] #vis fn #fn_name(ctx: *mut ::aya_ebpf::bindings::xdp_md) -> u32 { return #fn_name(::aya_ebpf::programs::XdpContext::new(ctx)); @@ -86,8 +86,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "xdp"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "xdp")] fn prog(ctx: *mut ::aya_ebpf::bindings::xdp_md) -> u32 { return prog(::aya_ebpf::programs::XdpContext::new(ctx)); @@ -112,8 +112,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "xdp.frags"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "xdp.frags")] fn prog(ctx: *mut ::aya_ebpf::bindings::xdp_md) -> u32 { return prog(::aya_ebpf::programs::XdpContext::new(ctx)); @@ -138,8 +138,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "xdp/cpumap"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "xdp/cpumap")] fn prog(ctx: *mut ::aya_ebpf::bindings::xdp_md) -> u32 { return prog(::aya_ebpf::programs::XdpContext::new(ctx)); @@ -164,8 +164,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "xdp/devmap"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "xdp/devmap")] fn prog(ctx: *mut ::aya_ebpf::bindings::xdp_md) -> u32 { return prog(::aya_ebpf::programs::XdpContext::new(ctx)); @@ -204,8 +204,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "xdp.frags/cpumap"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "xdp.frags/cpumap")] fn prog(ctx: *mut ::aya_ebpf::bindings::xdp_md) -> u32 { return prog(::aya_ebpf::programs::XdpContext::new(ctx)); @@ -230,8 +230,8 @@ mod tests { .unwrap(); let expanded = prog.expand(); let expected = quote! { - #[no_mangle] - #[link_section = "xdp.frags/devmap"] + #[unsafe(no_mangle)] + #[unsafe(link_section = "xdp.frags/devmap")] fn prog(ctx: *mut ::aya_ebpf::bindings::xdp_md) -> u32 { return prog(::aya_ebpf::programs::XdpContext::new(ctx)); diff --git a/aya-log-common/Cargo.toml b/aya-log-common/Cargo.toml index 24d4606f..ca0487de 100644 --- a/aya-log-common/Cargo.toml +++ b/aya-log-common/Cargo.toml @@ -8,6 +8,7 @@ authors.workspace = true license.workspace = true repository.workspace = true homepage.workspace = true +rust-version.workspace = true edition.workspace = true [dependencies] diff --git a/aya-log-ebpf-macros/Cargo.toml b/aya-log-ebpf-macros/Cargo.toml index 53ba5233..9bbf1138 100644 --- a/aya-log-ebpf-macros/Cargo.toml +++ b/aya-log-ebpf-macros/Cargo.toml @@ -6,6 +6,7 @@ authors.workspace = true license.workspace = true repository.workspace = true homepage.workspace = true +rust-version.workspace = true edition.workspace = true [dependencies] diff --git a/aya-log-ebpf-macros/src/expand.rs b/aya-log-ebpf-macros/src/expand.rs index fb4630b3..b49b3021 100644 --- a/aya-log-ebpf-macros/src/expand.rs +++ b/aya-log-ebpf-macros/src/expand.rs @@ -1,11 +1,11 @@ use aya_log_common::DisplayHint; -use aya_log_parser::{parse, Fragment}; +use aya_log_parser::{Fragment, parse}; use proc_macro2::{Ident, Span, TokenStream}; use quote::quote; use syn::{ + Error, Expr, LitStr, Result, Token, parse::{Parse, ParseStream}, punctuated::Punctuated, - Error, Expr, LitStr, Result, Token, }; pub(crate) struct LogArgs { @@ -146,7 +146,7 @@ pub(crate) fn log(args: LogArgs, level: Option) -> Result {}, Some(::aya_log_ebpf::LogBuf { buf }) => { let _: Option<()> = (|| { @@ -166,7 +166,7 @@ pub(crate) fn log(args: LogArgs, level: Option) -> Result(mut buf: &[u8]) -> Result<(T, &[u8], &[u8]), ()> { mod test { use std::net::IpAddr; - use aya_log_common::{write_record_header, WriteToBuf}; - use log::{logger, Level}; + use aya_log_common::{WriteToBuf, write_record_header}; + use log::{Level, logger}; use super::*; diff --git a/aya-obj/Cargo.toml b/aya-obj/Cargo.toml index 96603fb7..761f442d 100644 --- a/aya-obj/Cargo.toml +++ b/aya-obj/Cargo.toml @@ -9,6 +9,7 @@ authors.workspace = true license.workspace = true repository.workspace = true homepage.workspace = true +rust-version.workspace = true edition.workspace = true [dependencies] diff --git a/aya-obj/src/btf/btf.rs b/aya-obj/src/btf/btf.rs index 81533a0b..97650ad3 100644 --- a/aya-obj/src/btf/btf.rs +++ b/aya-obj/src/btf/btf.rs @@ -12,15 +12,15 @@ use log::debug; use object::{Endianness, SectionIndex}; use crate::{ + Object, btf::{ - info::{FuncSecInfo, LineSecInfo}, - relocation::Relocation, Array, BtfEnum, BtfKind, BtfMember, BtfType, Const, Enum, FuncInfo, FuncLinkage, Int, IntEncoding, LineInfo, Struct, Typedef, Union, VarLinkage, + info::{FuncSecInfo, LineSecInfo}, + relocation::Relocation, }, generated::{btf_ext_header, btf_header}, - util::{bytes_of, HashMap}, - Object, + util::{HashMap, bytes_of}, }; pub(crate) const MAX_RESOLVE_DEPTH: usize = 32; @@ -734,7 +734,7 @@ impl Object { &mut self, features: &BtfFeatures, ) -> Result, BtfError> { - if let Some(ref mut obj_btf) = &mut self.btf { + if let Some(obj_btf) = &mut self.btf { if obj_btf.is_empty() { return Ok(None); } @@ -752,8 +752,8 @@ impl Object { } unsafe fn read_btf_header(data: &[u8]) -> btf_header { - // safety: btf_header is POD so read_unaligned is safe - ptr::read_unaligned(data.as_ptr() as *const btf_header) + // Safety: Btf_header is POD so read_unaligned is safe + unsafe { ptr::read_unaligned(data.as_ptr().cast()) } } /// Data in the `.BTF.ext` section diff --git a/aya-obj/src/btf/info.rs b/aya-obj/src/btf/info.rs index 2a92e7bc..5be8ef55 100644 --- a/aya-obj/src/btf/info.rs +++ b/aya-obj/src/btf/info.rs @@ -6,7 +6,7 @@ use object::Endianness; use crate::{ generated::{bpf_func_info, bpf_line_info}, relocation::INS_SIZE, - util::{bytes_of, HashMap}, + util::{HashMap, bytes_of}, }; /* The func_info subsection layout: diff --git a/aya-obj/src/btf/relocation.rs b/aya-obj/src/btf/relocation.rs index 91fe4c4d..3547d561 100644 --- a/aya-obj/src/btf/relocation.rs +++ b/aya-obj/src/btf/relocation.rs @@ -11,16 +11,16 @@ use core::{mem, ops::Bound::Included, ptr}; use object::SectionIndex; use crate::{ + Function, Object, btf::{ - fields_are_compatible, types_are_compatible, Array, Btf, BtfError, BtfMember, BtfType, - IntEncoding, Struct, Union, MAX_SPEC_LEN, + Array, Btf, BtfError, BtfMember, BtfType, IntEncoding, MAX_SPEC_LEN, Struct, Union, + fields_are_compatible, types_are_compatible, }, generated::{ - bpf_core_relo, bpf_core_relo_kind::*, bpf_insn, BPF_ALU, BPF_ALU64, BPF_B, BPF_CALL, - BPF_DW, BPF_H, BPF_JMP, BPF_K, BPF_LD, BPF_LDX, BPF_ST, BPF_STX, BPF_W, BTF_INT_SIGNED, + BPF_ALU, BPF_ALU64, BPF_B, BPF_CALL, BPF_DW, BPF_H, BPF_JMP, BPF_K, BPF_LD, BPF_LDX, + BPF_ST, BPF_STX, BPF_W, BTF_INT_SIGNED, bpf_core_relo, bpf_core_relo_kind::*, bpf_insn, }, util::HashMap, - Function, Object, }; /// The error type returned by [`Object::relocate_btf`]. @@ -58,7 +58,9 @@ enum RelocationError { }, /// Invalid instruction index referenced by relocation - #[error("invalid instruction index #{index} referenced by relocation #{relocation_number}, the program contains {num_instructions} instructions")] + #[error( + "invalid instruction index #{index} referenced by relocation #{relocation_number}, the program contains {num_instructions} instructions" + )] InvalidInstructionIndex { /// The invalid instruction index index: usize, @@ -69,7 +71,9 @@ enum RelocationError { }, /// Multiple candidate target types found with different memory layouts - #[error("error relocating {type_name}, multiple candidate target types found with different memory layouts: {candidates:?}")] + #[error( + "error relocating {type_name}, multiple candidate target types found with different memory layouts: {candidates:?}" + )] ConflictingCandidates { /// The type name type_name: String, @@ -127,7 +131,9 @@ enum RelocationError { error: Cow<'static, str>, }, - #[error("applying relocation `{kind:?}` missing target BTF info for type `{type_id}` at instruction #{ins_index}")] + #[error( + "applying relocation `{kind:?}` missing target BTF info for type `{type_id}` at instruction #{ins_index}" + )] MissingTargetDefinition { kind: RelocationKind, type_id: u32, @@ -250,7 +256,7 @@ impl Object { return Err(BtfRelocationError { section: section_name.to_string(), error, - }) + }); } } } @@ -748,7 +754,7 @@ impl<'a> AccessSpec<'a> { relocation_kind: format!("{:?}", relocation.kind), type_kind: format!("{:?}", ty.kind()), error: "enum relocation on non-enum type", - }) + }); } }, @@ -1003,7 +1009,7 @@ impl ComputedRelocation { target.size, ) .into(), - }) + }); } } @@ -1017,7 +1023,7 @@ impl ComputedRelocation { relocation_number: rel.number, index: ins_index, error: format!("invalid target size {size}").into(), - }) + }); } } as u8; ins.code = ins.code & 0xE0 | size | ins.code & 0x07; @@ -1040,7 +1046,7 @@ impl ComputedRelocation { relocation_number: rel.number, index: ins_index, error: format!("invalid instruction class {class:x}").into(), - }) + }); } }; diff --git a/aya-obj/src/btf/types.rs b/aya-obj/src/btf/types.rs index e3642bcd..f59011d3 100644 --- a/aya-obj/src/btf/types.rs +++ b/aya-obj/src/btf/types.rs @@ -1117,7 +1117,7 @@ unsafe fn read(data: &[u8]) -> Result { return Err(BtfError::InvalidTypeInfo); } - Ok(ptr::read_unaligned::(data.as_ptr() as *const T)) + Ok(unsafe { ptr::read_unaligned(data.as_ptr().cast()) }) } unsafe fn read_array(data: &[u8], len: usize) -> Result, BtfError> { @@ -1127,7 +1127,7 @@ unsafe fn read_array(data: &[u8], len: usize) -> Result, BtfError> { let data = &data[0..mem::size_of::() * len]; let r = data .chunks(mem::size_of::()) - .map(|chunk| ptr::read_unaligned(chunk.as_ptr() as *const T)) + .map(|chunk| unsafe { ptr::read_unaligned(chunk.as_ptr().cast()) }) .collect(); Ok(r) } diff --git a/aya-obj/src/generated/linux_bindings_aarch64.rs b/aya-obj/src/generated/linux_bindings_aarch64.rs index 322e41a2..d480cbdb 100644 --- a/aya-obj/src/generated/linux_bindings_aarch64.rs +++ b/aya-obj/src/generated/linux_bindings_aarch64.rs @@ -47,11 +47,7 @@ where index % 8 }; let mask = 1 << bit_index; - if val { - byte | mask - } else { - byte & !mask - } + if val { byte | mask } else { byte & !mask } } #[inline] pub fn set_bit(&mut self, index: usize, val: bool) { diff --git a/aya-obj/src/generated/linux_bindings_armv7.rs b/aya-obj/src/generated/linux_bindings_armv7.rs index aca260bb..27b72036 100644 --- a/aya-obj/src/generated/linux_bindings_armv7.rs +++ b/aya-obj/src/generated/linux_bindings_armv7.rs @@ -47,11 +47,7 @@ where index % 8 }; let mask = 1 << bit_index; - if val { - byte | mask - } else { - byte & !mask - } + if val { byte | mask } else { byte & !mask } } #[inline] pub fn set_bit(&mut self, index: usize, val: bool) { diff --git a/aya-obj/src/generated/linux_bindings_mips.rs b/aya-obj/src/generated/linux_bindings_mips.rs index 5a8b7d28..8ffc7bfc 100644 --- a/aya-obj/src/generated/linux_bindings_mips.rs +++ b/aya-obj/src/generated/linux_bindings_mips.rs @@ -47,11 +47,7 @@ where index % 8 }; let mask = 1 << bit_index; - if val { - byte | mask - } else { - byte & !mask - } + if val { byte | mask } else { byte & !mask } } #[inline] pub fn set_bit(&mut self, index: usize, val: bool) { diff --git a/aya-obj/src/generated/linux_bindings_powerpc64.rs b/aya-obj/src/generated/linux_bindings_powerpc64.rs index 95b943b9..1da9d586 100644 --- a/aya-obj/src/generated/linux_bindings_powerpc64.rs +++ b/aya-obj/src/generated/linux_bindings_powerpc64.rs @@ -47,11 +47,7 @@ where index % 8 }; let mask = 1 << bit_index; - if val { - byte | mask - } else { - byte & !mask - } + if val { byte | mask } else { byte & !mask } } #[inline] pub fn set_bit(&mut self, index: usize, val: bool) { diff --git a/aya-obj/src/generated/linux_bindings_riscv64.rs b/aya-obj/src/generated/linux_bindings_riscv64.rs index 322e41a2..d480cbdb 100644 --- a/aya-obj/src/generated/linux_bindings_riscv64.rs +++ b/aya-obj/src/generated/linux_bindings_riscv64.rs @@ -47,11 +47,7 @@ where index % 8 }; let mask = 1 << bit_index; - if val { - byte | mask - } else { - byte & !mask - } + if val { byte | mask } else { byte & !mask } } #[inline] pub fn set_bit(&mut self, index: usize, val: bool) { diff --git a/aya-obj/src/generated/linux_bindings_s390x.rs b/aya-obj/src/generated/linux_bindings_s390x.rs index 322e41a2..d480cbdb 100644 --- a/aya-obj/src/generated/linux_bindings_s390x.rs +++ b/aya-obj/src/generated/linux_bindings_s390x.rs @@ -47,11 +47,7 @@ where index % 8 }; let mask = 1 << bit_index; - if val { - byte | mask - } else { - byte & !mask - } + if val { byte | mask } else { byte & !mask } } #[inline] pub fn set_bit(&mut self, index: usize, val: bool) { diff --git a/aya-obj/src/generated/linux_bindings_x86_64.rs b/aya-obj/src/generated/linux_bindings_x86_64.rs index 322e41a2..d480cbdb 100644 --- a/aya-obj/src/generated/linux_bindings_x86_64.rs +++ b/aya-obj/src/generated/linux_bindings_x86_64.rs @@ -47,11 +47,7 @@ where index % 8 }; let mask = 1 << bit_index; - if val { - byte | mask - } else { - byte & !mask - } + if val { byte | mask } else { byte & !mask } } #[inline] pub fn set_bit(&mut self, index: usize, val: bool) { diff --git a/aya-obj/src/lib.rs b/aya-obj/src/lib.rs index 30ff20b9..d83c2cad 100644 --- a/aya-obj/src/lib.rs +++ b/aya-obj/src/lib.rs @@ -72,7 +72,13 @@ extern crate alloc; extern crate std; pub mod btf; -#[expect(clippy::all, missing_docs, non_camel_case_types, non_snake_case)] +#[expect( + clippy::all, + missing_docs, + non_camel_case_types, + non_snake_case, + unsafe_op_in_unsafe_fn +)] pub mod generated; pub mod links; pub mod maps; diff --git a/aya-obj/src/links.rs b/aya-obj/src/links.rs index b01e60db..74db028e 100644 --- a/aya-obj/src/links.rs +++ b/aya-obj/src/links.rs @@ -1,8 +1,8 @@ //! Link type bindings. use crate::{ - generated::{bpf_attach_type, bpf_link_type}, InvalidTypeBinding, + generated::{bpf_attach_type, bpf_link_type}, }; impl TryFrom for bpf_link_type { diff --git a/aya-obj/src/obj.rs b/aya-obj/src/obj.rs index f628d9ec..b1ca01c0 100644 --- a/aya-obj/src/obj.rs +++ b/aya-obj/src/obj.rs @@ -12,9 +12,9 @@ use core::{ffi::CStr, mem, ptr, slice::from_raw_parts_mut, str::FromStr}; use log::debug; use object::{ - read::{Object as ElfObject, ObjectSection, Section as ObjSection}, Endianness, ObjectSymbol, ObjectSymbolTable, RelocationTarget, SectionIndex, SectionKind, SymbolKind, + read::{Object as ElfObject, ObjectSection, Section as ObjSection}, }; use crate::{ @@ -22,10 +22,10 @@ use crate::{ Array, Btf, BtfError, BtfExt, BtfFeatures, BtfType, DataSecEntry, FuncSecInfo, LineSecInfo, }, generated::{ - bpf_func_id::*, bpf_insn, bpf_map_info, bpf_map_type::BPF_MAP_TYPE_ARRAY, BPF_CALL, - BPF_F_RDONLY_PROG, BPF_JMP, BPF_K, + BPF_CALL, BPF_F_RDONLY_PROG, BPF_JMP, BPF_K, bpf_func_id::*, bpf_insn, bpf_map_info, + bpf_map_type::BPF_MAP_TYPE_ARRAY, }, - maps::{bpf_map_def, BtfMap, BtfMapDef, LegacyMap, Map, PinningType, MINIMUM_MAP_SIZE}, + maps::{BtfMap, BtfMapDef, LegacyMap, MINIMUM_MAP_SIZE, Map, PinningType, bpf_map_def}, programs::{ CgroupSockAddrAttachType, CgroupSockAttachType, CgroupSockoptAttachType, XdpAttachType, }, @@ -326,7 +326,7 @@ impl FromStr for ProgramSection { Some(_) => { return Err(ParseError::InvalidProgramSection { section: section.to_owned(), - }) + }); } }, }, @@ -342,7 +342,7 @@ impl FromStr for ProgramSection { _ => { return Err(ParseError::InvalidProgramSection { section: section.to_owned(), - }) + }); } } } @@ -356,7 +356,7 @@ impl FromStr for ProgramSection { _ => { return Err(ParseError::InvalidProgramSection { section: section.to_owned(), - }) + }); } } } @@ -446,7 +446,7 @@ impl FromStr for ProgramSection { _ => { return Err(ParseError::InvalidProgramSection { section: section.to_owned(), - }) + }); } }) } @@ -1150,7 +1150,7 @@ fn parse_version(data: &[u8], endianness: object::Endianness) -> Result { return Err(ParseError::InvalidKernelVersion { data: data.to_vec(), - }) + }); } }; @@ -1175,7 +1175,7 @@ fn get_map_field(btf: &Btf, type_id: u32) -> Result { other => { return Err(BtfError::UnexpectedBtfType { type_id: other.btf_type().unwrap_or(0), - }) + }); } }; // Safety: union @@ -1184,7 +1184,7 @@ fn get_map_field(btf: &Btf, type_id: u32) -> Result { other => { return Err(BtfError::UnexpectedBtfType { type_id: other.btf_type().unwrap_or(0), - }) + }); } }; Ok(arr.len) @@ -1260,7 +1260,7 @@ fn parse_btf_map_def(btf: &Btf, info: &DataSecEntry) -> Result<(String, BtfMapDe other => { return Err(BtfError::UnexpectedBtfType { type_id: other.btf_type().unwrap_or(0), - }) + }); } }; let map_name = btf.string_at(ty.name_offset)?; @@ -1273,7 +1273,7 @@ fn parse_btf_map_def(btf: &Btf, info: &DataSecEntry) -> Result<(String, BtfMapDe other => { return Err(BtfError::UnexpectedBtfType { type_id: other.btf_type().unwrap_or(0), - }) + }); } }; diff --git a/aya-obj/src/programs/types.rs b/aya-obj/src/programs/types.rs index 792f562b..92829f88 100644 --- a/aya-obj/src/programs/types.rs +++ b/aya-obj/src/programs/types.rs @@ -1,8 +1,8 @@ //! Program type bindings. use crate::{ - generated::bpf_prog_type::{self, *}, InvalidTypeBinding, + generated::bpf_prog_type::{self, *}, }; impl TryFrom for bpf_prog_type { diff --git a/aya-obj/src/relocation.rs b/aya-obj/src/relocation.rs index b46b277c..630b3d65 100644 --- a/aya-obj/src/relocation.rs +++ b/aya-obj/src/relocation.rs @@ -7,14 +7,14 @@ use log::debug; use object::{SectionIndex, SymbolKind}; use crate::{ + EbpfSectionKind, generated::{ - bpf_insn, BPF_CALL, BPF_JMP, BPF_K, BPF_PSEUDO_CALL, BPF_PSEUDO_FUNC, BPF_PSEUDO_MAP_FD, - BPF_PSEUDO_MAP_VALUE, + BPF_CALL, BPF_JMP, BPF_K, BPF_PSEUDO_CALL, BPF_PSEUDO_FUNC, BPF_PSEUDO_MAP_FD, + BPF_PSEUDO_MAP_VALUE, bpf_insn, }, maps::Map, obj::{Function, Object}, util::{HashMap, HashSet}, - EbpfSectionKind, }; #[cfg(feature = "std")] @@ -67,7 +67,9 @@ pub enum RelocationError { }, /// Unknown function - #[error("program at section {section_index} and address {address:#x} was not found while relocating")] + #[error( + "program at section {section_index} and address {address:#x} was not found while relocating" + )] UnknownProgram { /// The function section index section_index: usize, diff --git a/aya-obj/src/util.rs b/aya-obj/src/util.rs index 80d0179d..b2d0b38f 100644 --- a/aya-obj/src/util.rs +++ b/aya-obj/src/util.rs @@ -11,6 +11,6 @@ pub(crate) use hashbrown::HashSet; /// bytes_of converts a to a byte slice pub(crate) unsafe fn bytes_of(val: &T) -> &[u8] { - let size = mem::size_of::(); - slice::from_raw_parts(slice::from_ref(val).as_ptr().cast(), size) + let ptr: *const _ = val; + unsafe { slice::from_raw_parts(ptr.cast(), mem::size_of_val(val)) } } diff --git a/aya-tool/Cargo.toml b/aya-tool/Cargo.toml index e8dfdd4e..55d935a0 100644 --- a/aya-tool/Cargo.toml +++ b/aya-tool/Cargo.toml @@ -7,6 +7,7 @@ authors.workspace = true license.workspace = true repository.workspace = true homepage.workspace = true +rust-version.workspace = true edition.workspace = true [dependencies] diff --git a/aya-tool/src/bin/aya-tool.rs b/aya-tool/src/bin/aya-tool.rs index 759131d3..d46de23b 100644 --- a/aya-tool/src/bin/aya-tool.rs +++ b/aya-tool/src/bin/aya-tool.rs @@ -1,6 +1,6 @@ use std::{path::PathBuf, process::exit}; -use aya_tool::generate::{generate, InputFile}; +use aya_tool::generate::{InputFile, generate}; use clap::Parser; #[derive(Parser)] diff --git a/aya-tool/src/lib.rs b/aya-tool/src/lib.rs index 91bf6885..0f35973d 100644 --- a/aya-tool/src/lib.rs +++ b/aya-tool/src/lib.rs @@ -1,5 +1,5 @@ use std::{ - fs::{create_dir_all, File}, + fs::{File, create_dir_all}, io::{self, Write}, path::Path, }; @@ -8,7 +8,7 @@ pub mod bindgen; pub mod generate; pub mod rustfmt; -pub use generate::{generate, InputFile}; +pub use generate::{InputFile, generate}; pub fn write_to_file>(path: T, code: &str) -> Result<(), io::Error> { // Create parent directories if they don't exist already diff --git a/aya/BREAKING-CHANGES.md b/aya/BREAKING-CHANGES.md index bd312da1..00afba62 100644 --- a/aya/BREAKING-CHANGES.md +++ b/aya/BREAKING-CHANGES.md @@ -8,6 +8,9 @@ history and changelog. We also tag PRs on github with a [breaking change] label. ## Summary +- [v0.14.0](#v0140) + - MSRV has been bumped to 1.85.0. + - [v0.12.0](#v0120) - In `aya::Bpf::programs`, `name` uses the function name from the ELF file. - Maps API has been reworked. @@ -17,6 +20,15 @@ history and changelog. We also tag PRs on github with a [breaking change] label. - BTF types have moved to the `aya-obj` crate. - `aya::PerfEvent::attach` and `detach` signatures have changed. +## v0.14.0 + +### MSRV has been bumped to 1.85.0 + +The minimum supported Rust version has been bumped to 1.85.0. This is due to +the move to edition 2024 which was first available in this version. + +To migrate you will need to ensure that you are using rustc 1.85.0 or later. + ## v0.12.0 ### In `aya::Bpf::programs`, `name` uses the function name from the ELF file diff --git a/aya/Cargo.toml b/aya/Cargo.toml index 059c3c16..73454060 100644 --- a/aya/Cargo.toml +++ b/aya/Cargo.toml @@ -5,11 +5,11 @@ description = "An eBPF library with a focus on developer experience and operabil keywords = ["bpf", "ebpf", "kernel", "linux"] readme = "README.md" documentation = "https://docs.rs/aya" -rust-version = "1.80.0" authors.workspace = true license.workspace = true repository.workspace = true homepage.workspace = true +rust-version.workspace = true edition.workspace = true [dependencies] diff --git a/aya/src/bpf.rs b/aya/src/bpf.rs index 24859809..dc32e2f6 100644 --- a/aya/src/bpf.rs +++ b/aya/src/bpf.rs @@ -8,13 +8,13 @@ use std::{ }; use aya_obj::{ + EbpfSectionKind, Features, Object, ParseError, ProgramSection, btf::{Btf, BtfError, BtfFeatures, BtfRelocationError}, generated::{ - bpf_map_type::{self, *}, BPF_F_SLEEPABLE, BPF_F_XDP_HAS_FRAGS, + bpf_map_type::{self, *}, }, relocation::EbpfRelocationError, - EbpfSectionKind, Features, Object, ParseError, ProgramSection, }; use log::{debug, warn}; use thiserror::Error; @@ -55,7 +55,7 @@ unsafe_impl_pod!(i8, u8, i16, u16, i32, u32, i64, u64, u128, i128); // It only makes sense that an array of POD types is itself POD unsafe impl Pod for [T; N] {} -pub use aya_obj::maps::{bpf_map_def, PinningType}; +pub use aya_obj::maps::{PinningType, bpf_map_def}; pub(crate) static FEATURES: LazyLock = LazyLock::new(detect_features); @@ -239,17 +239,17 @@ impl<'a> EbpfLoader<'a> { /// From Rust eBPF, a global variable can be defined as follows: /// /// ```no_run - /// #[no_mangle] + /// #[unsafe(no_mangle)] /// static VERSION: i32 = 0; /// ``` /// /// Then it can be accessed using `core::ptr::read_volatile`: /// /// ```no_run - /// # #[no_mangle] + /// # #[unsafe(no_mangle)] /// # static VERSION: i32 = 0; - /// # unsafe fn try_test() { - /// let version = core::ptr::read_volatile(&VERSION); + /// # fn try_test() { + /// let version = unsafe { core::ptr::read_volatile(&VERSION) }; /// # } /// ``` /// @@ -403,7 +403,7 @@ impl<'a> EbpfLoader<'a> { | ProgramSection::Lsm { sleepable: _ } | ProgramSection::BtfTracePoint | ProgramSection::Iter { sleepable: _ } => { - return Err(EbpfError::BtfError(err)) + return Err(EbpfError::BtfError(err)); } ProgramSection::KRetProbe | ProgramSection::KProbe @@ -778,11 +778,7 @@ fn adjust_to_page_size(byte_size: u32, page_size: u32) -> u32 { fn div_ceil(n: u32, rhs: u32) -> u32 { let d = n / rhs; let r = n % rhs; - if r > 0 && rhs > 0 { - d + 1 - } else { - d - } + if r > 0 && rhs > 0 { d + 1 } else { d } } let pages_needed = div_ceil(byte_size, page_size); page_size * pages_needed.next_power_of_two() diff --git a/aya/src/lib.rs b/aya/src/lib.rs index b63bb868..8f37fd78 100644 --- a/aya/src/lib.rs +++ b/aya/src/lib.rs @@ -54,10 +54,6 @@ missing_docs, non_ascii_idents, noop_method_call, - rust_2021_incompatible_closure_captures, - rust_2021_incompatible_or_patterns, - rust_2021_prefixes_incompatible_syntax, - rust_2021_prelude_collisions, single_use_lifetimes, trivial_numeric_casts, unreachable_pub, @@ -176,7 +172,7 @@ impl AsRawFd for MockableFd { impl FromRawFd for MockableFd { unsafe fn from_raw_fd(fd: RawFd) -> Self { - let fd = OwnedFd::from_raw_fd(fd); + let fd = unsafe { OwnedFd::from_raw_fd(fd) }; Self::from_fd(fd) } } diff --git a/aya/src/maps/array/array.rs b/aya/src/maps/array/array.rs index fc94d2fc..86eb2f6a 100644 --- a/aya/src/maps/array/array.rs +++ b/aya/src/maps/array/array.rs @@ -5,9 +5,9 @@ use std::{ }; use crate::{ - maps::{check_bounds, check_kv_size, IterableMap, MapData, MapError}, - sys::{bpf_map_lookup_elem, bpf_map_update_elem, SyscallError}, Pod, + maps::{IterableMap, MapData, MapError, check_bounds, check_kv_size}, + sys::{SyscallError, bpf_map_lookup_elem, bpf_map_update_elem}, }; /// A fixed-size array. diff --git a/aya/src/maps/array/per_cpu_array.rs b/aya/src/maps/array/per_cpu_array.rs index 82564d6c..b5114efa 100644 --- a/aya/src/maps/array/per_cpu_array.rs +++ b/aya/src/maps/array/per_cpu_array.rs @@ -5,9 +5,9 @@ use std::{ }; use crate::{ - maps::{check_bounds, check_kv_size, IterableMap, MapData, MapError, PerCpuValues}, - sys::{bpf_map_lookup_elem_per_cpu, bpf_map_update_elem_per_cpu, SyscallError}, Pod, + maps::{IterableMap, MapData, MapError, PerCpuValues, check_bounds, check_kv_size}, + sys::{SyscallError, bpf_map_lookup_elem_per_cpu, bpf_map_update_elem_per_cpu}, }; /// A per-CPU fixed-size array. diff --git a/aya/src/maps/array/program_array.rs b/aya/src/maps/array/program_array.rs index ac41c54a..42c32c1a 100644 --- a/aya/src/maps/array/program_array.rs +++ b/aya/src/maps/array/program_array.rs @@ -6,9 +6,9 @@ use std::{ }; use crate::{ - maps::{check_bounds, check_kv_size, MapData, MapError, MapKeys}, + maps::{MapData, MapError, MapKeys, check_bounds, check_kv_size}, programs::ProgramFd, - sys::{bpf_map_delete_elem, bpf_map_update_elem, SyscallError}, + sys::{SyscallError, bpf_map_delete_elem, bpf_map_update_elem}, }; /// An array of eBPF program file descriptors used as a jump table. diff --git a/aya/src/maps/bloom_filter.rs b/aya/src/maps/bloom_filter.rs index 1d8b2c54..77b376a5 100644 --- a/aya/src/maps/bloom_filter.rs +++ b/aya/src/maps/bloom_filter.rs @@ -6,9 +6,9 @@ use std::{ }; use crate::{ - maps::{check_v_size, MapData, MapError}, - sys::{bpf_map_lookup_elem_ptr, bpf_map_push_elem, SyscallError}, Pod, + maps::{MapData, MapError, check_v_size}, + sys::{SyscallError, bpf_map_lookup_elem_ptr, bpf_map_push_elem}, }; /// A Bloom Filter. @@ -95,10 +95,10 @@ mod tests { use super::*; use crate::{ maps::{ - test_utils::{self, new_map}, Map, + test_utils::{self, new_map}, }, - sys::{override_syscall, SysResult, Syscall}, + sys::{SysResult, Syscall, override_syscall}, }; fn new_obj_map() -> aya_obj::Map { diff --git a/aya/src/maps/hash_map/hash_map.rs b/aya/src/maps/hash_map/hash_map.rs index 70c54c56..d88b5057 100644 --- a/aya/src/maps/hash_map/hash_map.rs +++ b/aya/src/maps/hash_map/hash_map.rs @@ -5,9 +5,9 @@ use std::{ }; use crate::{ - maps::{check_kv_size, hash_map, IterableMap, MapData, MapError, MapIter, MapKeys}, - sys::{bpf_map_lookup_elem, SyscallError}, Pod, + maps::{IterableMap, MapData, MapError, MapIter, MapKeys, check_kv_size, hash_map}, + sys::{SyscallError, bpf_map_lookup_elem}, }; /// A hash map that can be shared between eBPF programs and user space. @@ -115,10 +115,10 @@ mod tests { use super::*; use crate::{ maps::{ - test_utils::{self, new_map}, Map, + test_utils::{self, new_map}, }, - sys::{override_syscall, SysResult, Syscall}, + sys::{SysResult, Syscall, override_syscall}, }; fn new_obj_map() -> aya_obj::Map { diff --git a/aya/src/maps/hash_map/mod.rs b/aya/src/maps/hash_map/mod.rs index 6dffb688..47139ddc 100644 --- a/aya/src/maps/hash_map/mod.rs +++ b/aya/src/maps/hash_map/mod.rs @@ -2,9 +2,9 @@ use std::os::fd::AsFd as _; use crate::{ - maps::MapError, - sys::{bpf_map_delete_elem, bpf_map_update_elem, SyscallError}, Pod, + maps::MapError, + sys::{SyscallError, bpf_map_delete_elem, bpf_map_update_elem}, }; #[expect(clippy::module_inception)] diff --git a/aya/src/maps/hash_map/per_cpu_hash_map.rs b/aya/src/maps/hash_map/per_cpu_hash_map.rs index eed81b71..fcc01c18 100644 --- a/aya/src/maps/hash_map/per_cpu_hash_map.rs +++ b/aya/src/maps/hash_map/per_cpu_hash_map.rs @@ -6,11 +6,11 @@ use std::{ }; use crate::{ + Pod, maps::{ - check_kv_size, hash_map, IterableMap, MapData, MapError, MapIter, MapKeys, PerCpuValues, + IterableMap, MapData, MapError, MapIter, MapKeys, PerCpuValues, check_kv_size, hash_map, }, - sys::{bpf_map_lookup_elem_per_cpu, bpf_map_update_elem_per_cpu, SyscallError}, - Pod, + sys::{SyscallError, bpf_map_lookup_elem_per_cpu, bpf_map_update_elem_per_cpu}, }; /// Similar to [`HashMap`](crate::maps::HashMap) but each CPU holds a separate value for a given key. Typically used to @@ -159,8 +159,8 @@ mod tests { use super::*; use crate::{ - maps::{test_utils, Map}, - sys::{override_syscall, SysResult}, + maps::{Map, test_utils}, + sys::{SysResult, override_syscall}, }; fn sys_error(value: i32) -> SysResult { diff --git a/aya/src/maps/info.rs b/aya/src/maps/info.rs index a281b79f..40bf4f47 100644 --- a/aya/src/maps/info.rs +++ b/aya/src/maps/info.rs @@ -10,11 +10,11 @@ use aya_obj::generated::{bpf_map_info, bpf_map_type}; use super::{MapError, MapFd}; use crate::{ + FEATURES, sys::{ - bpf_get_object, bpf_map_get_fd_by_id, bpf_map_get_info_by_fd, iter_map_ids, SyscallError, + SyscallError, bpf_get_object, bpf_map_get_fd_by_id, bpf_map_get_info_by_fd, iter_map_ids, }, util::bytes_of_bpf_name, - FEATURES, }; /// Provides Provides metadata information about a loaded eBPF map. @@ -394,7 +394,7 @@ impl TryFrom for MapType { __MAX_BPF_MAP_TYPE => { return Err(MapError::InvalidMapType { map_type: map_type as u32, - }) + }); } }) } diff --git a/aya/src/maps/lpm_trie.rs b/aya/src/maps/lpm_trie.rs index 895fb24d..b857f9e6 100644 --- a/aya/src/maps/lpm_trie.rs +++ b/aya/src/maps/lpm_trie.rs @@ -6,9 +6,9 @@ use std::{ }; use crate::{ - maps::{check_kv_size, IterableMap, MapData, MapError, MapIter, MapKeys}, - sys::{bpf_map_delete_elem, bpf_map_lookup_elem, bpf_map_update_elem, SyscallError}, Pod, + maps::{IterableMap, MapData, MapError, MapIter, MapKeys, check_kv_size}, + sys::{SyscallError, bpf_map_delete_elem, bpf_map_lookup_elem, bpf_map_update_elem}, }; /// A Longest Prefix Match Trie. @@ -202,10 +202,10 @@ mod tests { use super::*; use crate::{ maps::{ - test_utils::{self, new_map}, Map, + test_utils::{self, new_map}, }, - sys::{override_syscall, SysResult, Syscall}, + sys::{SysResult, Syscall, override_syscall}, }; fn new_obj_map() -> aya_obj::Map { diff --git a/aya/src/maps/mod.rs b/aya/src/maps/mod.rs index 5e8283e0..8afe0ce4 100644 --- a/aya/src/maps/mod.rs +++ b/aya/src/maps/mod.rs @@ -59,21 +59,21 @@ use std::{ ptr, }; -use aya_obj::{generated::bpf_map_type, parse_map_info, EbpfSectionKind, InvalidTypeBinding}; +use aya_obj::{EbpfSectionKind, InvalidTypeBinding, generated::bpf_map_type, parse_map_info}; use libc::{ - c_int, c_void, getrlimit, off_t, rlim_t, rlimit, MAP_FAILED, RLIMIT_MEMLOCK, RLIM_INFINITY, + MAP_FAILED, RLIM_INFINITY, RLIMIT_MEMLOCK, c_int, c_void, getrlimit, off_t, rlim_t, rlimit, }; use log::warn; use thiserror::Error; use crate::{ + PinningType, Pod, pin::PinError, sys::{ - bpf_create_map, bpf_get_object, bpf_map_freeze, bpf_map_get_fd_by_id, bpf_map_get_next_key, - bpf_map_update_elem_ptr, bpf_pin_object, mmap, munmap, SyscallError, + SyscallError, bpf_create_map, bpf_get_object, bpf_map_freeze, bpf_map_get_fd_by_id, + bpf_map_get_next_key, bpf_map_update_elem_ptr, bpf_pin_object, mmap, munmap, }, - util::{nr_cpus, KernelVersion}, - PinningType, Pod, + util::{KernelVersion, nr_cpus}, }; pub mod array; @@ -92,7 +92,7 @@ pub mod xdp; pub use array::{Array, PerCpuArray, ProgramArray}; pub use bloom_filter::BloomFilter; pub use hash_map::{HashMap, PerCpuHashMap}; -pub use info::{loaded_maps, MapInfo, MapType}; +pub use info::{MapInfo, MapType, loaded_maps}; pub use lpm_trie::LpmTrie; #[cfg(any(feature = "async_tokio", feature = "async_std"))] #[cfg_attr(docsrs, doc(cfg(any(feature = "async_tokio", feature = "async_std"))))] @@ -912,13 +912,12 @@ impl PerCpuValues { } pub(crate) unsafe fn from_kernel_mem(mem: PerCpuKernelMem) -> Self { - let mem_ptr = mem.bytes.as_ptr() as usize; - let value_size = (mem::size_of::() + 7) & !7; + let stride = (mem::size_of::() + 7) & !7; let mut values = Vec::new(); let mut offset = 0; while offset < mem.bytes.len() { - values.push(ptr::read_unaligned((mem_ptr + offset) as *const _)); - offset += value_size; + values.push(unsafe { ptr::read_unaligned(mem.bytes.as_ptr().add(offset).cast()) }); + offset += stride; } Self { @@ -1005,15 +1004,15 @@ impl Drop for MMap { #[cfg(test)] mod test_utils { use aya_obj::{ + EbpfSectionKind, generated::{bpf_cmd, bpf_map_type}, maps::LegacyMap, - EbpfSectionKind, }; use crate::{ bpf_map_def, maps::MapData, - sys::{override_syscall, Syscall}, + sys::{Syscall, override_syscall}, }; pub(super) fn new_map(obj: aya_obj::Map) -> MapData { @@ -1072,7 +1071,7 @@ mod tests { use libc::EFAULT; use super::*; - use crate::sys::{override_syscall, Syscall}; + use crate::sys::{Syscall, override_syscall}; fn new_obj_map() -> aya_obj::Map { test_utils::new_obj_map::(bpf_map_type::BPF_MAP_TYPE_HASH) diff --git a/aya/src/maps/perf/async_perf_event_array.rs b/aya/src/maps/perf/async_perf_event_array.rs index 1b0a2f36..ecc7babb 100644 --- a/aya/src/maps/perf/async_perf_event_array.rs +++ b/aya/src/maps/perf/async_perf_event_array.rs @@ -14,8 +14,8 @@ use bytes::BytesMut; use tokio::io::unix::AsyncFd; use crate::maps::{ - perf::{Events, PerfBufferError, PerfEventArray, PerfEventArrayBuffer}, MapData, MapError, PinError, + perf::{Events, PerfBufferError, PerfEventArray, PerfEventArrayBuffer}, }; /// A `Future` based map that can be used to receive events from eBPF programs using the linux diff --git a/aya/src/maps/perf/perf_buffer.rs b/aya/src/maps/perf/perf_buffer.rs index 8729dc1b..387d7ff5 100644 --- a/aya/src/maps/perf/perf_buffer.rs +++ b/aya/src/maps/perf/perf_buffer.rs @@ -15,7 +15,7 @@ use thiserror::Error; use crate::{ maps::MMap, - sys::{perf_event_ioctl, perf_event_open_bpf, PerfEventIoctlRequest, SyscallError}, + sys::{PerfEventIoctlRequest, SyscallError, perf_event_ioctl, perf_event_open_bpf}, }; /// Perf buffer error. @@ -270,7 +270,7 @@ mod tests { use assert_matches::assert_matches; use super::*; - use crate::sys::{override_syscall, Syscall, TEST_MMAP_RET}; + use crate::sys::{Syscall, TEST_MMAP_RET, override_syscall}; #[repr(C)] #[derive(Debug)] diff --git a/aya/src/maps/perf/perf_event_array.rs b/aya/src/maps/perf/perf_event_array.rs index 7095cb5d..ac8e4cee 100644 --- a/aya/src/maps/perf/perf_event_array.rs +++ b/aya/src/maps/perf/perf_event_array.rs @@ -13,8 +13,8 @@ use bytes::BytesMut; use crate::{ maps::{ - perf::{Events, PerfBuffer, PerfBufferError}, MapData, MapError, PinError, + perf::{Events, PerfBuffer, PerfBufferError}, }, sys::bpf_map_update_elem, util::page_size, diff --git a/aya/src/maps/queue.rs b/aya/src/maps/queue.rs index 470a37cd..225a5ec0 100644 --- a/aya/src/maps/queue.rs +++ b/aya/src/maps/queue.rs @@ -6,9 +6,9 @@ use std::{ }; use crate::{ - maps::{check_kv_size, MapData, MapError}, - sys::{bpf_map_lookup_and_delete_elem, bpf_map_push_elem, SyscallError}, Pod, + maps::{MapData, MapError, check_kv_size}, + sys::{SyscallError, bpf_map_lookup_and_delete_elem, bpf_map_push_elem}, }; /// A FIFO queue. diff --git a/aya/src/maps/ring_buf.rs b/aya/src/maps/ring_buf.rs index 3285a3cc..e455329f 100644 --- a/aya/src/maps/ring_buf.rs +++ b/aya/src/maps/ring_buf.rs @@ -312,11 +312,11 @@ impl ProducerData { } fn next<'a>(&'a mut self, consumer: &'a mut ConsumerPos) -> Option> { - let Self { + let &mut Self { ref mmap, - data_offset, - pos_cache, - mask, + ref mut data_offset, + ref mut pos_cache, + ref mut mask, } = self; let pos = unsafe { mmap.ptr.cast().as_ref() }; let mmap_data = mmap.as_ref(); diff --git a/aya/src/maps/sock/sock_hash.rs b/aya/src/maps/sock/sock_hash.rs index 5d0a28cc..63efd703 100644 --- a/aya/src/maps/sock/sock_hash.rs +++ b/aya/src/maps/sock/sock_hash.rs @@ -5,12 +5,12 @@ use std::{ }; use crate::{ + Pod, maps::{ - check_kv_size, hash_map, sock::SockMapFd, IterableMap, MapData, MapError, MapFd, MapIter, - MapKeys, + IterableMap, MapData, MapError, MapFd, MapIter, MapKeys, check_kv_size, hash_map, + sock::SockMapFd, }, - sys::{bpf_map_lookup_elem, SyscallError}, - Pod, + sys::{SyscallError, bpf_map_lookup_elem}, }; /// A hash map of TCP or UDP sockets. diff --git a/aya/src/maps/sock/sock_map.rs b/aya/src/maps/sock/sock_map.rs index a8581d8a..d139730a 100644 --- a/aya/src/maps/sock/sock_map.rs +++ b/aya/src/maps/sock/sock_map.rs @@ -6,8 +6,8 @@ use std::{ }; use crate::{ - maps::{check_bounds, check_kv_size, sock::SockMapFd, MapData, MapError, MapFd, MapKeys}, - sys::{bpf_map_delete_elem, bpf_map_update_elem, SyscallError}, + maps::{MapData, MapError, MapFd, MapKeys, check_bounds, check_kv_size, sock::SockMapFd}, + sys::{SyscallError, bpf_map_delete_elem, bpf_map_update_elem}, }; /// An array of TCP or UDP sockets. diff --git a/aya/src/maps/stack.rs b/aya/src/maps/stack.rs index 07f9a574..e62af980 100644 --- a/aya/src/maps/stack.rs +++ b/aya/src/maps/stack.rs @@ -6,9 +6,9 @@ use std::{ }; use crate::{ - maps::{check_kv_size, MapData, MapError}, - sys::{bpf_map_lookup_and_delete_elem, bpf_map_update_elem, SyscallError}, Pod, + maps::{MapData, MapError, check_kv_size}, + sys::{SyscallError, bpf_map_lookup_and_delete_elem, bpf_map_update_elem}, }; /// A LIFO stack. diff --git a/aya/src/maps/stack_trace.rs b/aya/src/maps/stack_trace.rs index 5dffa0c7..6b031bce 100644 --- a/aya/src/maps/stack_trace.rs +++ b/aya/src/maps/stack_trace.rs @@ -11,7 +11,7 @@ use std::{ use crate::{ maps::{IterableMap, MapData, MapError, MapIter, MapKeys}, - sys::{bpf_map_delete_elem, bpf_map_lookup_elem_ptr, SyscallError}, + sys::{SyscallError, bpf_map_delete_elem, bpf_map_lookup_elem_ptr}, }; /// A hash map of kernel or user space stack traces. diff --git a/aya/src/maps/xdp/cpu_map.rs b/aya/src/maps/xdp/cpu_map.rs index 7579650c..bf2b7e05 100644 --- a/aya/src/maps/xdp/cpu_map.rs +++ b/aya/src/maps/xdp/cpu_map.rs @@ -10,10 +10,10 @@ use aya_obj::generated::bpf_cpumap_val; use super::XdpMapError; use crate::{ - maps::{check_bounds, check_kv_size, IterableMap, MapData, MapError}, + FEATURES, Pod, + maps::{IterableMap, MapData, MapError, check_bounds, check_kv_size}, programs::ProgramFd, - sys::{bpf_map_lookup_elem, bpf_map_update_elem, SyscallError}, - Pod, FEATURES, + sys::{SyscallError, bpf_map_lookup_elem, bpf_map_update_elem}, }; /// An array of available CPUs. diff --git a/aya/src/maps/xdp/dev_map.rs b/aya/src/maps/xdp/dev_map.rs index ac0c27cc..c7f25481 100644 --- a/aya/src/maps/xdp/dev_map.rs +++ b/aya/src/maps/xdp/dev_map.rs @@ -10,10 +10,10 @@ use aya_obj::generated::bpf_devmap_val; use super::XdpMapError; use crate::{ - maps::{check_bounds, check_kv_size, IterableMap, MapData, MapError}, + FEATURES, Pod, + maps::{IterableMap, MapData, MapError, check_bounds, check_kv_size}, programs::ProgramFd, - sys::{bpf_map_lookup_elem, bpf_map_update_elem, SyscallError}, - Pod, FEATURES, + sys::{SyscallError, bpf_map_lookup_elem, bpf_map_update_elem}, }; /// An array of network devices. diff --git a/aya/src/maps/xdp/dev_map_hash.rs b/aya/src/maps/xdp/dev_map_hash.rs index 7717cc06..a09910de 100644 --- a/aya/src/maps/xdp/dev_map_hash.rs +++ b/aya/src/maps/xdp/dev_map_hash.rs @@ -8,12 +8,12 @@ use std::{ use aya_obj::generated::bpf_devmap_val; -use super::{dev_map::DevMapValue, XdpMapError}; +use super::{XdpMapError, dev_map::DevMapValue}; use crate::{ - maps::{check_kv_size, hash_map, IterableMap, MapData, MapError, MapIter, MapKeys}, - programs::ProgramFd, - sys::{bpf_map_lookup_elem, SyscallError}, FEATURES, + maps::{IterableMap, MapData, MapError, MapIter, MapKeys, check_kv_size, hash_map}, + programs::ProgramFd, + sys::{SyscallError, bpf_map_lookup_elem}, }; /// An hashmap of network devices. diff --git a/aya/src/maps/xdp/xsk_map.rs b/aya/src/maps/xdp/xsk_map.rs index 29f50758..f38b97fc 100644 --- a/aya/src/maps/xdp/xsk_map.rs +++ b/aya/src/maps/xdp/xsk_map.rs @@ -6,8 +6,8 @@ use std::{ }; use crate::{ - maps::{check_bounds, check_kv_size, MapData, MapError}, - sys::{bpf_map_update_elem, SyscallError}, + maps::{MapData, MapError, check_bounds, check_kv_size}, + sys::{SyscallError, bpf_map_update_elem}, }; /// An array of AF_XDP sockets. diff --git a/aya/src/programs/cgroup_device.rs b/aya/src/programs/cgroup_device.rs index 33421552..d2b12946 100644 --- a/aya/src/programs/cgroup_device.rs +++ b/aya/src/programs/cgroup_device.rs @@ -8,10 +8,10 @@ use aya_obj::generated::{ use crate::{ programs::{ - bpf_prog_get_fd_by_id, define_link_wrapper, id_as_key, load_program, query, CgroupAttachMode, FdLink, Link, ProgAttachLink, ProgramData, ProgramError, ProgramFd, + bpf_prog_get_fd_by_id, define_link_wrapper, id_as_key, load_program, query, }, - sys::{bpf_link_create, LinkTarget, ProgQueryTarget, SyscallError}, + sys::{LinkTarget, ProgQueryTarget, SyscallError, bpf_link_create}, util::KernelVersion, }; diff --git a/aya/src/programs/cgroup_skb.rs b/aya/src/programs/cgroup_skb.rs index d216eb66..26f5490d 100644 --- a/aya/src/programs/cgroup_skb.rs +++ b/aya/src/programs/cgroup_skb.rs @@ -8,13 +8,13 @@ use aya_obj::generated::{ }; use crate::{ + VerifierLogLevel, programs::{ - define_link_wrapper, id_as_key, load_program, CgroupAttachMode, FdLink, Link, - ProgAttachLink, ProgramData, ProgramError, + CgroupAttachMode, FdLink, Link, ProgAttachLink, ProgramData, ProgramError, + define_link_wrapper, id_as_key, load_program, }, - sys::{bpf_link_create, LinkTarget, SyscallError}, + sys::{LinkTarget, SyscallError, bpf_link_create}, util::KernelVersion, - VerifierLogLevel, }; /// A program used to inspect or filter network activity for a given cgroup. diff --git a/aya/src/programs/cgroup_sock.rs b/aya/src/programs/cgroup_sock.rs index ea9f8112..fad1ac76 100644 --- a/aya/src/programs/cgroup_sock.rs +++ b/aya/src/programs/cgroup_sock.rs @@ -6,13 +6,13 @@ use aya_obj::generated::bpf_prog_type::BPF_PROG_TYPE_CGROUP_SOCK; pub use aya_obj::programs::CgroupSockAttachType; use crate::{ + VerifierLogLevel, programs::{ - define_link_wrapper, id_as_key, load_program, CgroupAttachMode, FdLink, Link, - ProgAttachLink, ProgramData, ProgramError, + CgroupAttachMode, FdLink, Link, ProgAttachLink, ProgramData, ProgramError, + define_link_wrapper, id_as_key, load_program, }, - sys::{bpf_link_create, LinkTarget, SyscallError}, + sys::{LinkTarget, SyscallError, bpf_link_create}, util::KernelVersion, - VerifierLogLevel, }; /// A program that is called on socket creation, bind and release. diff --git a/aya/src/programs/cgroup_sock_addr.rs b/aya/src/programs/cgroup_sock_addr.rs index 22e29dba..61da9a31 100644 --- a/aya/src/programs/cgroup_sock_addr.rs +++ b/aya/src/programs/cgroup_sock_addr.rs @@ -6,13 +6,13 @@ use aya_obj::generated::bpf_prog_type::BPF_PROG_TYPE_CGROUP_SOCK_ADDR; pub use aya_obj::programs::CgroupSockAddrAttachType; use crate::{ + VerifierLogLevel, programs::{ - define_link_wrapper, id_as_key, load_program, CgroupAttachMode, FdLink, Link, - ProgAttachLink, ProgramData, ProgramError, + CgroupAttachMode, FdLink, Link, ProgAttachLink, ProgramData, ProgramError, + define_link_wrapper, id_as_key, load_program, }, - sys::{bpf_link_create, LinkTarget, SyscallError}, + sys::{LinkTarget, SyscallError, bpf_link_create}, util::KernelVersion, - VerifierLogLevel, }; /// A program that can be used to inspect or modify socket addresses (`struct sockaddr`). diff --git a/aya/src/programs/cgroup_sockopt.rs b/aya/src/programs/cgroup_sockopt.rs index ed2d6542..67515d06 100644 --- a/aya/src/programs/cgroup_sockopt.rs +++ b/aya/src/programs/cgroup_sockopt.rs @@ -6,13 +6,13 @@ use aya_obj::generated::bpf_prog_type::BPF_PROG_TYPE_CGROUP_SOCKOPT; pub use aya_obj::programs::CgroupSockoptAttachType; use crate::{ + VerifierLogLevel, programs::{ - define_link_wrapper, id_as_key, load_program, CgroupAttachMode, FdLink, Link, - ProgAttachLink, ProgramData, ProgramError, + CgroupAttachMode, FdLink, Link, ProgAttachLink, ProgramData, ProgramError, + define_link_wrapper, id_as_key, load_program, }, - sys::{bpf_link_create, LinkTarget, SyscallError}, + sys::{LinkTarget, SyscallError, bpf_link_create}, util::KernelVersion, - VerifierLogLevel, }; /// A program that can be used to get or set options on sockets. diff --git a/aya/src/programs/cgroup_sysctl.rs b/aya/src/programs/cgroup_sysctl.rs index 299e662e..503bcf9d 100644 --- a/aya/src/programs/cgroup_sysctl.rs +++ b/aya/src/programs/cgroup_sysctl.rs @@ -8,10 +8,10 @@ use aya_obj::generated::{ use crate::{ programs::{ - define_link_wrapper, id_as_key, load_program, CgroupAttachMode, FdLink, Link, - ProgAttachLink, ProgramData, ProgramError, + CgroupAttachMode, FdLink, Link, ProgAttachLink, ProgramData, ProgramError, + define_link_wrapper, id_as_key, load_program, }, - sys::{bpf_link_create, LinkTarget, SyscallError}, + sys::{LinkTarget, SyscallError, bpf_link_create}, util::KernelVersion, }; diff --git a/aya/src/programs/extension.rs b/aya/src/programs/extension.rs index 20827a43..0033206f 100644 --- a/aya/src/programs/extension.rs +++ b/aya/src/programs/extension.rs @@ -10,11 +10,11 @@ use object::Endianness; use thiserror::Error; use crate::{ + Btf, programs::{ - define_link_wrapper, load_program, FdLink, FdLinkId, ProgramData, ProgramError, ProgramFd, + FdLink, FdLinkId, ProgramData, ProgramError, ProgramFd, define_link_wrapper, load_program, }, - sys::{self, bpf_link_create, BpfLinkCreateArgs, LinkTarget, SyscallError}, - Btf, + sys::{self, BpfLinkCreateArgs, LinkTarget, SyscallError, bpf_link_create}, }; /// The type returned when loading or attaching an [`Extension`] fails. diff --git a/aya/src/programs/fentry.rs b/aya/src/programs/fentry.rs index 6de4278b..8f550f7a 100644 --- a/aya/src/programs/fentry.rs +++ b/aya/src/programs/fentry.rs @@ -6,8 +6,8 @@ use aya_obj::{ }; use crate::programs::{ - define_link_wrapper, load_program, utils::attach_raw_tracepoint, FdLink, FdLinkId, ProgramData, - ProgramError, + FdLink, FdLinkId, ProgramData, ProgramError, define_link_wrapper, load_program, + utils::attach_raw_tracepoint, }; /// A program that can be attached to the entry point of (almost) any kernel diff --git a/aya/src/programs/fexit.rs b/aya/src/programs/fexit.rs index 5c031b9c..3b70c7ec 100644 --- a/aya/src/programs/fexit.rs +++ b/aya/src/programs/fexit.rs @@ -6,8 +6,8 @@ use aya_obj::{ }; use crate::programs::{ - define_link_wrapper, load_program, utils::attach_raw_tracepoint, FdLink, FdLinkId, ProgramData, - ProgramError, + FdLink, FdLinkId, ProgramData, ProgramError, define_link_wrapper, load_program, + utils::attach_raw_tracepoint, }; /// A program that can be attached to the exit point of (almost) anny kernel diff --git a/aya/src/programs/info.rs b/aya/src/programs/info.rs index 7038edab..876264d1 100644 --- a/aya/src/programs/info.rs +++ b/aya/src/programs/info.rs @@ -10,15 +10,15 @@ use std::{ use aya_obj::generated::{bpf_prog_info, bpf_prog_type}; use super::{ - utils::{boot_time, get_fdinfo}, ProgramError, ProgramFd, + utils::{boot_time, get_fdinfo}, }; use crate::{ + FEATURES, sys::{ - bpf_get_object, bpf_prog_get_fd_by_id, bpf_prog_get_info_by_fd, iter_prog_ids, SyscallError, + SyscallError, bpf_get_object, bpf_prog_get_fd_by_id, bpf_prog_get_info_by_fd, iter_prog_ids, }, util::bytes_of_bpf_name, - FEATURES, }; /// Provides metadata information about a loaded eBPF program. diff --git a/aya/src/programs/iter.rs b/aya/src/programs/iter.rs index f95bce5d..564115da 100644 --- a/aya/src/programs/iter.rs +++ b/aya/src/programs/iter.rs @@ -14,10 +14,10 @@ use aya_obj::{ use crate::{ programs::{ - define_link_wrapper, load_program, FdLink, LinkError, PerfLinkIdInner, PerfLinkInner, - ProgramData, ProgramError, + FdLink, LinkError, PerfLinkIdInner, PerfLinkInner, ProgramData, ProgramError, + define_link_wrapper, load_program, }, - sys::{bpf_create_iter, bpf_link_create, bpf_link_get_info_by_fd, LinkTarget, SyscallError}, + sys::{LinkTarget, SyscallError, bpf_create_iter, bpf_link_create, bpf_link_get_info_by_fd}, }; /// A BPF iterator which allows to dump data from the kernel-space into the diff --git a/aya/src/programs/kprobe.rs b/aya/src/programs/kprobe.rs index b903818b..95ef6a24 100644 --- a/aya/src/programs/kprobe.rs +++ b/aya/src/programs/kprobe.rs @@ -10,14 +10,13 @@ use aya_obj::generated::{bpf_link_type, bpf_prog_type::BPF_PROG_TYPE_KPROBE}; use thiserror::Error; use crate::{ + VerifierLogLevel, programs::{ - define_link_wrapper, load_program, + FdLink, LinkError, ProgramData, ProgramError, define_link_wrapper, load_program, perf_attach::{PerfLinkIdInner, PerfLinkInner}, - probe::{attach, ProbeKind}, - FdLink, LinkError, ProgramData, ProgramError, + probe::{ProbeKind, attach}, }, sys::bpf_link_get_info_by_fd, - VerifierLogLevel, }; /// A kernel probe. diff --git a/aya/src/programs/links.rs b/aya/src/programs/links.rs index 7ec08cc7..53628eb1 100644 --- a/aya/src/programs/links.rs +++ b/aya/src/programs/links.rs @@ -7,8 +7,8 @@ use std::{ }; use aya_obj::generated::{ - bpf_attach_type, BPF_F_AFTER, BPF_F_ALLOW_MULTI, BPF_F_ALLOW_OVERRIDE, BPF_F_BEFORE, BPF_F_ID, - BPF_F_LINK, BPF_F_REPLACE, + BPF_F_AFTER, BPF_F_ALLOW_MULTI, BPF_F_ALLOW_OVERRIDE, BPF_F_BEFORE, BPF_F_ID, BPF_F_LINK, + BPF_F_REPLACE, bpf_attach_type, }; use hashbrown::hash_set::{Entry, HashSet}; use thiserror::Error; @@ -16,7 +16,7 @@ use thiserror::Error; use crate::{ pin::PinError, programs::{MultiProgLink, MultiProgram, ProgramError, ProgramFd, ProgramId}, - sys::{bpf_get_object, bpf_pin_object, bpf_prog_attach, bpf_prog_detach, SyscallError}, + sys::{SyscallError, bpf_get_object, bpf_pin_object, bpf_prog_attach, bpf_prog_detach}, }; /// A Link. diff --git a/aya/src/programs/lirc_mode2.rs b/aya/src/programs/lirc_mode2.rs index 27c4f050..9bd9a11f 100644 --- a/aya/src/programs/lirc_mode2.rs +++ b/aya/src/programs/lirc_mode2.rs @@ -7,10 +7,10 @@ use aya_obj::generated::{ use crate::{ programs::{ - id_as_key, load_program, query, CgroupAttachMode, Link, ProgramData, ProgramError, - ProgramFd, ProgramInfo, + CgroupAttachMode, Link, ProgramData, ProgramError, ProgramFd, ProgramInfo, id_as_key, + load_program, query, }, - sys::{bpf_prog_attach, bpf_prog_detach, bpf_prog_get_fd_by_id, ProgQueryTarget}, + sys::{ProgQueryTarget, bpf_prog_attach, bpf_prog_detach, bpf_prog_get_fd_by_id}, }; /// A program used to decode IR into key events for a lirc device. diff --git a/aya/src/programs/lsm.rs b/aya/src/programs/lsm.rs index 3cf7ba82..ae6912ca 100644 --- a/aya/src/programs/lsm.rs +++ b/aya/src/programs/lsm.rs @@ -6,8 +6,8 @@ use aya_obj::{ }; use crate::programs::{ - define_link_wrapper, load_program, utils::attach_raw_tracepoint, FdLink, FdLinkId, ProgramData, - ProgramError, + FdLink, FdLinkId, ProgramData, ProgramError, define_link_wrapper, load_program, + utils::attach_raw_tracepoint, }; /// A program that attaches to Linux LSM hooks. Used to implement security policy and diff --git a/aya/src/programs/mod.rs b/aya/src/programs/mod.rs index 02f90d23..45171628 100644 --- a/aya/src/programs/mod.rs +++ b/aya/src/programs/mod.rs @@ -79,12 +79,12 @@ use std::{ }; use aya_obj::{ + VerifierLog, btf::BtfError, generated::{bpf_attach_type, bpf_link_info, bpf_prog_info, bpf_prog_type}, - VerifierLog, }; use info::impl_info; -pub use info::{loaded_programs, ProgramInfo, ProgramType}; +pub use info::{ProgramInfo, ProgramType, loaded_programs}; use libc::ENOSPC; use tc::SchedClassifierLink; use thiserror::Error; @@ -120,17 +120,17 @@ pub use crate::programs::{ xdp::{Xdp, XdpError, XdpFlags}, }; use crate::{ + VerifierLogLevel, maps::MapError, pin::PinError, programs::{links::*, perf_attach::*}, sys::{ - bpf_btf_get_fd_by_id, bpf_get_object, bpf_link_get_fd_by_id, bpf_link_get_info_by_fd, - bpf_load_program, bpf_pin_object, bpf_prog_get_fd_by_id, bpf_prog_query, iter_link_ids, - retry_with_verifier_logs, EbpfLoadProgramAttrs, NetlinkError, ProgQueryTarget, - SyscallError, + EbpfLoadProgramAttrs, NetlinkError, ProgQueryTarget, SyscallError, bpf_btf_get_fd_by_id, + bpf_get_object, bpf_link_get_fd_by_id, bpf_link_get_info_by_fd, bpf_load_program, + bpf_pin_object, bpf_prog_get_fd_by_id, bpf_prog_query, iter_link_ids, + retry_with_verifier_logs, }, util::KernelVersion, - VerifierLogLevel, }; /// Error type returned when working with programs. diff --git a/aya/src/programs/perf_attach.rs b/aya/src/programs/perf_attach.rs index 0dd0e25c..12644f9d 100644 --- a/aya/src/programs/perf_attach.rs +++ b/aya/src/programs/perf_attach.rs @@ -7,16 +7,15 @@ use std::{ use aya_obj::generated::bpf_attach_type::BPF_PERF_EVENT; use crate::{ + FEATURES, programs::{ - id_as_key, - probe::{detach_debug_fs, ProbeEvent}, - FdLink, Link, ProgramError, + FdLink, Link, ProgramError, id_as_key, + probe::{ProbeEvent, detach_debug_fs}, }, sys::{ - bpf_link_create, is_bpf_cookie_supported, perf_event_ioctl, BpfLinkCreateArgs, LinkTarget, - PerfEventIoctlRequest, SyscallError, + BpfLinkCreateArgs, LinkTarget, PerfEventIoctlRequest, SyscallError, bpf_link_create, + is_bpf_cookie_supported, perf_event_ioctl, }, - FEATURES, }; #[derive(Debug, Hash, Eq, PartialEq)] diff --git a/aya/src/programs/perf_event.rs b/aya/src/programs/perf_event.rs index e935c898..b8bda2e8 100644 --- a/aya/src/programs/perf_event.rs +++ b/aya/src/programs/perf_event.rs @@ -16,12 +16,12 @@ pub use aya_obj::generated::{ use crate::{ programs::{ + FdLink, LinkError, ProgramData, ProgramError, links::define_link_wrapper, load_program, perf_attach, perf_attach::{PerfLinkIdInner, PerfLinkInner}, - FdLink, LinkError, ProgramData, ProgramError, }, - sys::{bpf_link_get_info_by_fd, perf_event_open, SyscallError}, + sys::{SyscallError, bpf_link_get_info_by_fd, perf_event_open}, }; /// The type of perf event diff --git a/aya/src/programs/probe.rs b/aya/src/programs/probe.rs index 8b5b9272..8c82d626 100644 --- a/aya/src/programs/probe.rs +++ b/aya/src/programs/probe.rs @@ -13,11 +13,11 @@ use libc::pid_t; use crate::{ programs::{ - kprobe::KProbeError, perf_attach, perf_attach::PerfLinkInner, perf_attach_debugfs, - trace_point::read_sys_fs_trace_point_id, uprobe::UProbeError, utils::find_tracefs_path, - Link, ProgramData, ProgramError, + Link, ProgramData, ProgramError, kprobe::KProbeError, perf_attach, + perf_attach::PerfLinkInner, perf_attach_debugfs, trace_point::read_sys_fs_trace_point_id, + uprobe::UProbeError, utils::find_tracefs_path, }, - sys::{perf_event_open_probe, perf_event_open_trace_point, SyscallError}, + sys::{SyscallError, perf_event_open_probe, perf_event_open_trace_point}, util::KernelVersion, }; diff --git a/aya/src/programs/raw_trace_point.rs b/aya/src/programs/raw_trace_point.rs index 9ac98a37..193e5aee 100644 --- a/aya/src/programs/raw_trace_point.rs +++ b/aya/src/programs/raw_trace_point.rs @@ -4,8 +4,8 @@ use std::ffi::CString; use aya_obj::generated::bpf_prog_type::BPF_PROG_TYPE_RAW_TRACEPOINT; use crate::programs::{ - define_link_wrapper, load_program, utils::attach_raw_tracepoint, FdLink, FdLinkId, ProgramData, - ProgramError, + FdLink, FdLinkId, ProgramData, ProgramError, define_link_wrapper, load_program, + utils::attach_raw_tracepoint, }; /// A program that can be attached at a pre-defined kernel trace point. diff --git a/aya/src/programs/sk_lookup.rs b/aya/src/programs/sk_lookup.rs index 37731fcb..5b741615 100644 --- a/aya/src/programs/sk_lookup.rs +++ b/aya/src/programs/sk_lookup.rs @@ -5,8 +5,8 @@ use aya_obj::generated::{bpf_attach_type::BPF_SK_LOOKUP, bpf_prog_type::BPF_PROG use super::links::FdLink; use crate::{ - programs::{define_link_wrapper, load_program, FdLinkId, ProgramData, ProgramError}, - sys::{bpf_link_create, LinkTarget, SyscallError}, + programs::{FdLinkId, ProgramData, ProgramError, define_link_wrapper, load_program}, + sys::{LinkTarget, SyscallError, bpf_link_create}, }; /// A program used to redirect incoming packets to a local socket. diff --git a/aya/src/programs/sk_msg.rs b/aya/src/programs/sk_msg.rs index 178165f9..c2df61a5 100644 --- a/aya/src/programs/sk_msg.rs +++ b/aya/src/programs/sk_msg.rs @@ -9,8 +9,8 @@ use aya_obj::generated::{ use crate::{ maps::sock::SockMapFd, programs::{ - define_link_wrapper, load_program, CgroupAttachMode, ProgAttachLink, ProgAttachLinkId, - ProgramData, ProgramError, + CgroupAttachMode, ProgAttachLink, ProgAttachLinkId, ProgramData, ProgramError, + define_link_wrapper, load_program, }, }; diff --git a/aya/src/programs/sk_skb.rs b/aya/src/programs/sk_skb.rs index 900dfe47..ee115657 100644 --- a/aya/src/programs/sk_skb.rs +++ b/aya/src/programs/sk_skb.rs @@ -8,12 +8,12 @@ use aya_obj::generated::{ }; use crate::{ + VerifierLogLevel, maps::sock::SockMapFd, programs::{ - define_link_wrapper, load_program, CgroupAttachMode, ProgAttachLink, ProgAttachLinkId, - ProgramData, ProgramError, + CgroupAttachMode, ProgAttachLink, ProgAttachLinkId, ProgramData, ProgramError, + define_link_wrapper, load_program, }, - VerifierLogLevel, }; /// The kind of [`SkSkb`] program. diff --git a/aya/src/programs/sock_ops.rs b/aya/src/programs/sock_ops.rs index 0dab18f8..89bc864c 100644 --- a/aya/src/programs/sock_ops.rs +++ b/aya/src/programs/sock_ops.rs @@ -7,10 +7,10 @@ use aya_obj::generated::{ use crate::{ programs::{ - define_link_wrapper, id_as_key, load_program, CgroupAttachMode, FdLink, Link, - ProgAttachLink, ProgramData, ProgramError, + CgroupAttachMode, FdLink, Link, ProgAttachLink, ProgramData, ProgramError, + define_link_wrapper, id_as_key, load_program, }, - sys::{bpf_link_create, LinkTarget, SyscallError}, + sys::{LinkTarget, SyscallError, bpf_link_create}, util::KernelVersion, }; diff --git a/aya/src/programs/socket_filter.rs b/aya/src/programs/socket_filter.rs index b1a96249..0af018a4 100644 --- a/aya/src/programs/socket_filter.rs +++ b/aya/src/programs/socket_filter.rs @@ -5,12 +5,12 @@ use std::{ }; use aya_obj::generated::{ - bpf_prog_type::BPF_PROG_TYPE_SOCKET_FILTER, SO_ATTACH_BPF, SO_DETACH_BPF, + SO_ATTACH_BPF, SO_DETACH_BPF, bpf_prog_type::BPF_PROG_TYPE_SOCKET_FILTER, }; -use libc::{setsockopt, SOL_SOCKET}; +use libc::{SOL_SOCKET, setsockopt}; use thiserror::Error; -use crate::programs::{id_as_key, load_program, Link, ProgramData, ProgramError}; +use crate::programs::{Link, ProgramData, ProgramError, id_as_key, load_program}; /// The type returned when attaching a [`SocketFilter`] fails. #[derive(Debug, Error)] diff --git a/aya/src/programs/tc.rs b/aya/src/programs/tc.rs index a61d79c3..e2925914 100644 --- a/aya/src/programs/tc.rs +++ b/aya/src/programs/tc.rs @@ -7,27 +7,27 @@ use std::{ }; use aya_obj::generated::{ + TC_H_CLSACT, TC_H_MIN_EGRESS, TC_H_MIN_INGRESS, bpf_attach_type::{self, BPF_TCX_EGRESS, BPF_TCX_INGRESS}, bpf_link_type, bpf_prog_type::BPF_PROG_TYPE_SCHED_CLS, - TC_H_CLSACT, TC_H_MIN_EGRESS, TC_H_MIN_INGRESS, }; use thiserror::Error; use super::{FdLink, ProgramInfo}; use crate::{ + VerifierLogLevel, programs::{ - define_link_wrapper, id_as_key, load_program, query, Link, LinkError, LinkOrder, - ProgramData, ProgramError, + Link, LinkError, LinkOrder, ProgramData, ProgramError, define_link_wrapper, id_as_key, + load_program, query, }, sys::{ + BpfLinkCreateArgs, LinkTarget, NetlinkError, ProgQueryTarget, SyscallError, bpf_link_create, bpf_link_get_info_by_fd, bpf_link_update, bpf_prog_get_fd_by_id, netlink_find_filter_with_name, netlink_qdisc_add_clsact, netlink_qdisc_attach, - netlink_qdisc_detach, BpfLinkCreateArgs, LinkTarget, NetlinkError, ProgQueryTarget, - SyscallError, + netlink_qdisc_detach, }, - util::{ifindex_from_ifname, tc_handler_make, KernelVersion}, - VerifierLogLevel, + util::{KernelVersion, ifindex_from_ifname, tc_handler_make}, }; /// Traffic control attach type. @@ -103,7 +103,9 @@ pub enum TcError { #[error("the clsact qdisc is already attached")] AlreadyAttached, /// tcx links can only be attached to ingress or egress, custom attachment is not supported. - #[error("tcx links can only be attached to ingress or egress, custom attachment: {0} is not supported")] + #[error( + "tcx links can only be attached to ingress or egress, custom attachment: {0} is not supported" + )] InvalidTcxAttach(u32), /// operation not supported for programs loaded via tcx. #[error("operation not supported for programs loaded via tcx")] diff --git a/aya/src/programs/tp_btf.rs b/aya/src/programs/tp_btf.rs index 3e22ad4c..6bba718e 100644 --- a/aya/src/programs/tp_btf.rs +++ b/aya/src/programs/tp_btf.rs @@ -6,8 +6,8 @@ use aya_obj::{ }; use crate::programs::{ - define_link_wrapper, load_program, utils::attach_raw_tracepoint, FdLink, FdLinkId, ProgramData, - ProgramError, + FdLink, FdLinkId, ProgramData, ProgramError, define_link_wrapper, load_program, + utils::attach_raw_tracepoint, }; /// Marks a function as a [BTF-enabled raw tracepoint][1] eBPF program that can be attached at diff --git a/aya/src/programs/trace_point.rs b/aya/src/programs/trace_point.rs index 91dc51cb..ea3fe565 100644 --- a/aya/src/programs/trace_point.rs +++ b/aya/src/programs/trace_point.rs @@ -10,12 +10,11 @@ use thiserror::Error; use crate::{ programs::{ - define_link_wrapper, load_program, - perf_attach::{perf_attach, PerfLinkIdInner, PerfLinkInner}, + FdLink, LinkError, ProgramData, ProgramError, define_link_wrapper, load_program, + perf_attach::{PerfLinkIdInner, PerfLinkInner, perf_attach}, utils::find_tracefs_path, - FdLink, LinkError, ProgramData, ProgramError, }, - sys::{bpf_link_get_info_by_fd, perf_event_open_trace_point, SyscallError}, + sys::{SyscallError, bpf_link_get_info_by_fd, perf_event_open_trace_point}, }; /// The type returned when attaching a [`TracePoint`] fails. @@ -137,7 +136,7 @@ pub(crate) fn read_sys_fs_trace_point_id( return Err(TracePointError::FileError { filename, io_error: io::Error::other(error), - }) + }); } }; diff --git a/aya/src/programs/uprobe.rs b/aya/src/programs/uprobe.rs index 0cc8e784..ef2521d2 100644 --- a/aya/src/programs/uprobe.rs +++ b/aya/src/programs/uprobe.rs @@ -2,7 +2,7 @@ use std::{ borrow::Cow, error::Error, - ffi::{c_char, CStr, OsStr, OsString}, + ffi::{CStr, OsStr, OsString, c_char}, fs, io::{self, BufRead, Cursor, Read}, mem, @@ -17,14 +17,13 @@ use object::{Object, ObjectSection, ObjectSymbol, Symbol}; use thiserror::Error; use crate::{ + VerifierLogLevel, programs::{ - define_link_wrapper, load_program, + FdLink, LinkError, ProgramData, ProgramError, define_link_wrapper, load_program, perf_attach::{PerfLinkIdInner, PerfLinkInner}, - probe::{attach, OsStringExt as _, ProbeKind}, - FdLink, LinkError, ProgramData, ProgramError, + probe::{OsStringExt as _, ProbeKind, attach}, }, sys::bpf_link_get_info_by_fd, - VerifierLogLevel, }; const LD_SO_CACHE_FILE: &str = "/etc/ld.so.cache"; @@ -569,7 +568,7 @@ fn resolve_symbol(path: &Path, symbol: &str) -> Result #[cfg(test)] mod tests { - use object::{write::SectionKind, Architecture, BinaryFormat, Endianness}; + use object::{Architecture, BinaryFormat, Endianness, write::SectionKind}; use super::*; diff --git a/aya/src/programs/utils.rs b/aya/src/programs/utils.rs index a68bf410..924ca8c6 100644 --- a/aya/src/programs/utils.rs +++ b/aya/src/programs/utils.rs @@ -11,7 +11,7 @@ use std::{ use crate::{ programs::{FdLink, Link, ProgramData, ProgramError}, - sys::{bpf_raw_tracepoint_open, SyscallError}, + sys::{SyscallError, bpf_raw_tracepoint_open}, }; /// Attaches the program to a raw tracepoint. diff --git a/aya/src/programs/xdp.rs b/aya/src/programs/xdp.rs index a6a1eb7c..a7777eee 100644 --- a/aya/src/programs/xdp.rs +++ b/aya/src/programs/xdp.rs @@ -9,8 +9,8 @@ use std::{ use aya_obj::{ generated::{ - bpf_link_type, bpf_prog_type, XDP_FLAGS_DRV_MODE, XDP_FLAGS_HW_MODE, XDP_FLAGS_REPLACE, - XDP_FLAGS_SKB_MODE, XDP_FLAGS_UPDATE_IF_NOEXIST, + XDP_FLAGS_DRV_MODE, XDP_FLAGS_HW_MODE, XDP_FLAGS_REPLACE, XDP_FLAGS_SKB_MODE, + XDP_FLAGS_UPDATE_IF_NOEXIST, bpf_link_type, bpf_prog_type, }, programs::XdpAttachType, }; @@ -18,16 +18,16 @@ use libc::if_nametoindex; use thiserror::Error; use crate::{ + VerifierLogLevel, programs::{ - define_link_wrapper, id_as_key, load_program, FdLink, Link, LinkError, ProgramData, - ProgramError, + FdLink, Link, LinkError, ProgramData, ProgramError, define_link_wrapper, id_as_key, + load_program, }, sys::{ - bpf_link_create, bpf_link_get_info_by_fd, bpf_link_update, netlink_set_xdp_fd, LinkTarget, - NetlinkError, SyscallError, + LinkTarget, NetlinkError, SyscallError, bpf_link_create, bpf_link_get_info_by_fd, + bpf_link_update, netlink_set_xdp_fd, }, util::KernelVersion, - VerifierLogLevel, }; /// An error that occurred while working with an XDP program. diff --git a/aya/src/sys/bpf.rs b/aya/src/sys/bpf.rs index 078e2443..564c414b 100644 --- a/aya/src/sys/bpf.rs +++ b/aya/src/sys/bpf.rs @@ -1,6 +1,6 @@ use std::{ cmp, - ffi::{c_char, c_long, CStr, CString}, + ffi::{CStr, CString, c_char, c_long}, io, iter, mem::{self, MaybeUninit}, os::fd::{AsFd as _, AsRawFd as _, BorrowedFd, FromRawFd as _, RawFd}, @@ -8,28 +8,28 @@ use std::{ use assert_matches::assert_matches; use aya_obj::{ + EbpfSectionKind, VerifierLog, btf::{ BtfEnum64, BtfParam, BtfType, DataSec, DataSecEntry, DeclTag, Enum64, Float, Func, FuncLinkage, FuncProto, FuncSecInfo, Int, IntEncoding, LineSecInfo, Ptr, TypeTag, Var, VarLinkage, }, generated::{ - bpf_attach_type, bpf_attr, bpf_btf_info, bpf_cmd, bpf_func_id::*, bpf_insn, bpf_link_info, - bpf_map_info, bpf_map_type, bpf_prog_info, bpf_prog_type, bpf_stats_type, BPF_ALU64, - BPF_CALL, BPF_DW, BPF_EXIT, BPF_F_REPLACE, BPF_IMM, BPF_JMP, BPF_K, BPF_LD, BPF_MEM, - BPF_MOV, BPF_PSEUDO_MAP_VALUE, BPF_ST, BPF_SUB, BPF_X, + BPF_ALU64, BPF_CALL, BPF_DW, BPF_EXIT, BPF_F_REPLACE, BPF_IMM, BPF_JMP, BPF_K, BPF_LD, + BPF_MEM, BPF_MOV, BPF_PSEUDO_MAP_VALUE, BPF_ST, BPF_SUB, BPF_X, bpf_attach_type, bpf_attr, + bpf_btf_info, bpf_cmd, bpf_func_id::*, bpf_insn, bpf_link_info, bpf_map_info, bpf_map_type, + bpf_prog_info, bpf_prog_type, bpf_stats_type, }, - maps::{bpf_map_def, LegacyMap}, - EbpfSectionKind, VerifierLog, + maps::{LegacyMap, bpf_map_def}, }; use libc::{ENOENT, ENOSPC}; use crate::{ + Btf, FEATURES, Pod, VerifierLogLevel, maps::{MapData, PerCpuValues}, programs::links::LinkRef, - sys::{syscall, Syscall, SyscallError}, + sys::{Syscall, SyscallError, syscall}, util::KernelVersion, - Btf, Pod, VerifierLogLevel, FEATURES, }; pub(crate) fn bpf_create_iter(link_fd: BorrowedFd<'_>) -> io::Result { @@ -690,7 +690,7 @@ unsafe fn fd_sys_bpf(cmd: bpf_cmd, attr: &mut bpf_attr) -> io::Result Result { diff --git a/aya/src/sys/mod.rs b/aya/src/sys/mod.rs index 6d649187..a28054b2 100644 --- a/aya/src/sys/mod.rs +++ b/aya/src/sys/mod.rs @@ -165,17 +165,21 @@ pub(crate) unsafe fn mmap( { use std::os::fd::AsRawFd as _; - libc::mmap(addr, len, prot, flags, fd.as_raw_fd(), offset) + unsafe { libc::mmap(addr, len, prot, flags, fd.as_raw_fd(), offset) } } } #[cfg_attr(test, expect(unused_variables))] pub(crate) unsafe fn munmap(addr: *mut c_void, len: usize) -> c_int { - #[cfg(not(test))] - return libc::munmap(addr, len); - #[cfg(test)] - 0 + { + 0 + } + + #[cfg(not(test))] + { + unsafe { libc::munmap(addr, len) } + } } /// The type of eBPF statistic to enable. diff --git a/aya/src/sys/netlink.rs b/aya/src/sys/netlink.rs index f67f6b92..02ae5ee7 100644 --- a/aya/src/sys/netlink.rs +++ b/aya/src/sys/netlink.rs @@ -7,17 +7,16 @@ use std::{ }; use aya_obj::generated::{ - ifinfomsg, nlmsgerr_attrs::NLMSGERR_ATTR_MSG, tcmsg, IFLA_XDP_EXPECTED_FD, IFLA_XDP_FD, - IFLA_XDP_FLAGS, NLMSG_ALIGNTO, TCA_BPF_FD, TCA_BPF_FLAGS, TCA_BPF_FLAG_ACT_DIRECT, - TCA_BPF_NAME, TCA_KIND, TCA_OPTIONS, TC_H_CLSACT, TC_H_INGRESS, TC_H_MAJ_MASK, TC_H_UNSPEC, - XDP_FLAGS_REPLACE, + IFLA_XDP_EXPECTED_FD, IFLA_XDP_FD, IFLA_XDP_FLAGS, NLMSG_ALIGNTO, TC_H_CLSACT, TC_H_INGRESS, + TC_H_MAJ_MASK, TC_H_UNSPEC, TCA_BPF_FD, TCA_BPF_FLAG_ACT_DIRECT, TCA_BPF_FLAGS, TCA_BPF_NAME, + TCA_KIND, TCA_OPTIONS, XDP_FLAGS_REPLACE, ifinfomsg, nlmsgerr_attrs::NLMSGERR_ATTR_MSG, tcmsg, }; use libc::{ - getsockname, nlattr, nlmsgerr, nlmsghdr, recv, send, setsockopt, sockaddr_nl, socket, AF_NETLINK, AF_UNSPEC, ETH_P_ALL, IFF_UP, IFLA_XDP, NETLINK_CAP_ACK, NETLINK_EXT_ACK, - NETLINK_ROUTE, NLA_ALIGNTO, NLA_F_NESTED, NLA_TYPE_MASK, NLMSG_DONE, NLMSG_ERROR, NLM_F_ACK, - NLM_F_CREATE, NLM_F_DUMP, NLM_F_ECHO, NLM_F_EXCL, NLM_F_MULTI, NLM_F_REQUEST, RTM_DELTFILTER, - RTM_GETTFILTER, RTM_NEWQDISC, RTM_NEWTFILTER, RTM_SETLINK, SOCK_RAW, SOL_NETLINK, + NETLINK_ROUTE, NLA_ALIGNTO, NLA_F_NESTED, NLA_TYPE_MASK, NLM_F_ACK, NLM_F_CREATE, NLM_F_DUMP, + NLM_F_ECHO, NLM_F_EXCL, NLM_F_MULTI, NLM_F_REQUEST, NLMSG_DONE, NLMSG_ERROR, RTM_DELTFILTER, + RTM_GETTFILTER, RTM_NEWQDISC, RTM_NEWTFILTER, RTM_SETLINK, SOCK_RAW, SOL_NETLINK, getsockname, + nlattr, nlmsgerr, nlmsghdr, recv, send, setsockopt, sockaddr_nl, socket, }; use thiserror::Error; @@ -58,7 +57,7 @@ pub(crate) unsafe fn netlink_set_xdp_fd( let sock = NetlinkSocket::open()?; // Safety: Request is POD so this is safe - let mut req = mem::zeroed::(); + let mut req = unsafe { mem::zeroed::() }; let nlmsg_len = mem::size_of::() + mem::size_of::(); req.header = nlmsghdr { @@ -72,7 +71,7 @@ pub(crate) unsafe fn netlink_set_xdp_fd( req.if_info.ifi_index = if_index; // write the attrs - let attrs_buf = request_attributes(&mut req, nlmsg_len); + let attrs_buf = unsafe { request_attributes(&mut req, nlmsg_len) }; let mut attrs = NestedAttrs::new(attrs_buf, IFLA_XDP); attrs .write_attr( @@ -109,7 +108,7 @@ pub(crate) unsafe fn netlink_set_xdp_fd( pub(crate) unsafe fn netlink_qdisc_add_clsact(if_index: i32) -> Result<(), NetlinkError> { let sock = NetlinkSocket::open()?; - let mut req = mem::zeroed::(); + let mut req = unsafe { mem::zeroed::() }; let nlmsg_len = mem::size_of::() + mem::size_of::(); req.header = nlmsghdr { @@ -126,7 +125,7 @@ pub(crate) unsafe fn netlink_qdisc_add_clsact(if_index: i32) -> Result<(), Netli req.tc_info.tcm_info = 0; // add the TCA_KIND attribute - let attrs_buf = request_attributes(&mut req, nlmsg_len); + let attrs_buf = unsafe { request_attributes(&mut req, nlmsg_len) }; let attr_len = write_attr_bytes(attrs_buf, 0, TCA_KIND as u16, b"clsact\0") .map_err(|e| NetlinkError(NetlinkErrorInternal::IoError(e)))?; req.header.nlmsg_len += align_to(attr_len, NLA_ALIGNTO as usize) as u32; @@ -147,7 +146,8 @@ pub(crate) unsafe fn netlink_qdisc_attach( create: bool, ) -> Result<(u16, u32), NetlinkError> { let sock = NetlinkSocket::open()?; - let mut req = mem::zeroed::(); + + let mut req = unsafe { mem::zeroed::() }; let nlmsg_len = mem::size_of::() + mem::size_of::(); // When create=true, we're creating a new attachment so we must set NLM_F_CREATE. Then we also @@ -176,7 +176,7 @@ pub(crate) unsafe fn netlink_qdisc_attach( req.tc_info.tcm_parent = attach_type.tc_parent(); req.tc_info.tcm_info = tc_handler_make((priority as u32) << 16, htons(ETH_P_ALL as u16) as u32); - let attrs_buf = request_attributes(&mut req, nlmsg_len); + let attrs_buf = unsafe { request_attributes(&mut req, nlmsg_len) }; // add TCA_KIND let kind_len = write_attr_bytes(attrs_buf, 0, TCA_KIND as u16, b"bpf\0") @@ -203,12 +203,12 @@ pub(crate) unsafe fn netlink_qdisc_attach( // find the RTM_NEWTFILTER reply and read the tcm_info and tcm_handle fields // which we'll need to detach - let tc_msg = match sock + let tc_msg: tcmsg = match sock .recv()? .iter() .find(|reply| reply.header.nlmsg_type == RTM_NEWTFILTER) { - Some(reply) => ptr::read_unaligned(reply.data.as_ptr() as *const tcmsg), + Some(reply) => unsafe { ptr::read_unaligned(reply.data.as_ptr().cast()) }, None => { // if sock.recv() succeeds we should never get here unless there's a // bug in the kernel @@ -229,7 +229,8 @@ pub(crate) unsafe fn netlink_qdisc_detach( handle: u32, ) -> Result<(), NetlinkError> { let sock = NetlinkSocket::open()?; - let mut req = mem::zeroed::(); + + let mut req = unsafe { mem::zeroed::() }; req.header = nlmsghdr { nlmsg_len: (mem::size_of::() + mem::size_of::()) as u32, @@ -258,7 +259,7 @@ pub(crate) unsafe fn netlink_find_filter_with_name( attach_type: TcAttachType, name: &CStr, ) -> Result, NetlinkError> { - let mut req = mem::zeroed::(); + let mut req = unsafe { mem::zeroed::() }; let nlmsg_len = mem::size_of::() + mem::size_of::(); req.header = nlmsghdr { @@ -282,7 +283,7 @@ pub(crate) unsafe fn netlink_find_filter_with_name( continue; } - let tc_msg = ptr::read_unaligned(msg.data.as_ptr() as *const tcmsg); + let tc_msg: tcmsg = unsafe { ptr::read_unaligned(msg.data.as_ptr().cast()) }; let priority = (tc_msg.tcm_info >> 16) as u16; let attrs = parse_attrs(&msg.data[mem::size_of::()..]) .map_err(|e| NetlinkError(NetlinkErrorInternal::NlAttrError(e)))?; @@ -308,7 +309,7 @@ pub unsafe fn netlink_set_link_up(if_index: i32) -> Result<(), NetlinkError> { let sock = NetlinkSocket::open()?; // Safety: Request is POD so this is safe - let mut req = mem::zeroed::(); + let mut req = unsafe { mem::zeroed::() }; let nlmsg_len = mem::size_of::() + mem::size_of::(); req.header = nlmsghdr { @@ -709,11 +710,11 @@ impl From for io::Error { unsafe fn request_attributes(req: &mut T, msg_len: usize) -> &mut [u8] { let req: *mut _ = req; let req: *mut u8 = req.cast(); - let attrs_addr = req.add(msg_len); + let attrs_addr = unsafe { req.add(msg_len) }; let align_offset = attrs_addr.align_offset(NLMSG_ALIGNTO as usize); - let attrs_addr = attrs_addr.add(align_offset); + let attrs_addr = unsafe { attrs_addr.add(align_offset) }; let len = mem::size_of::() - msg_len - align_offset; - slice::from_raw_parts_mut(attrs_addr, len) + unsafe { slice::from_raw_parts_mut(attrs_addr, len) } } fn bytes_of(val: &T) -> &[u8] { diff --git a/aya/src/sys/perf_event.rs b/aya/src/sys/perf_event.rs index cffec976..1cc01a2c 100644 --- a/aya/src/sys/perf_event.rs +++ b/aya/src/sys/perf_event.rs @@ -1,19 +1,18 @@ use std::{ - ffi::{c_int, CString, OsStr}, + ffi::{CString, OsStr, c_int}, io, mem, os::fd::{BorrowedFd, FromRawFd as _}, }; use aya_obj::generated::{ - perf_event_attr, + PERF_FLAG_FD_CLOEXEC, perf_event_attr, perf_event_sample_format::PERF_SAMPLE_RAW, perf_sw_ids::PERF_COUNT_SW_BPF_OUTPUT, perf_type_id::{PERF_TYPE_SOFTWARE, PERF_TYPE_TRACEPOINT}, - PERF_FLAG_FD_CLOEXEC, }; use libc::pid_t; -use super::{syscall, PerfEventIoctlRequest, Syscall}; +use super::{PerfEventIoctlRequest, Syscall, syscall}; #[expect(clippy::too_many_arguments)] pub(crate) fn perf_event_open( diff --git a/aya/src/util.rs b/aya/src/util.rs index 4964d705..4635e837 100644 --- a/aya/src/util.rs +++ b/aya/src/util.rs @@ -13,7 +13,7 @@ use std::{ }; use aya_obj::generated::{TC_H_MAJ_MASK, TC_H_MIN_MASK}; -use libc::{if_nametoindex, sysconf, uname, utsname, _SC_PAGESIZE}; +use libc::{_SC_PAGESIZE, if_nametoindex, sysconf, uname, utsname}; use log::warn; use crate::Pod; @@ -409,8 +409,8 @@ pub(crate) fn page_size() -> usize { // bytes_of converts a to a byte slice pub(crate) unsafe fn bytes_of(val: &T) -> &[u8] { - let size = mem::size_of::(); - slice::from_raw_parts(slice::from_ref(val).as_ptr().cast(), size) + let ptr: *const _ = val; + unsafe { slice::from_raw_parts(ptr.cast(), mem::size_of_val(val)) } } pub(crate) fn bytes_of_slice(val: &[T]) -> &[u8] { diff --git a/ebpf/aya-ebpf-bindings/build.rs b/ebpf/aya-ebpf-bindings/build.rs index 720e89da..4c2a7477 100644 --- a/ebpf/aya-ebpf-bindings/build.rs +++ b/ebpf/aya-ebpf-bindings/build.rs @@ -12,5 +12,7 @@ fn main() { } println!("cargo:rustc-cfg=bpf_target_arch=\"{arch}\""); } - println!("cargo::rustc-check-cfg=cfg(bpf_target_arch, values(\"x86_64\",\"arm\",\"aarch64\",\"riscv64\",\"powerpc64\",\"s390x\",\"mips\"))"); + println!( + "cargo::rustc-check-cfg=cfg(bpf_target_arch, values(\"x86_64\",\"arm\",\"aarch64\",\"riscv64\",\"powerpc64\",\"s390x\",\"mips\"))" + ); } diff --git a/ebpf/aya-ebpf-bindings/src/aarch64/bindings.rs b/ebpf/aya-ebpf-bindings/src/aarch64/bindings.rs index 293868f1..a2b920ee 100644 --- a/ebpf/aya-ebpf-bindings/src/aarch64/bindings.rs +++ b/ebpf/aya-ebpf-bindings/src/aarch64/bindings.rs @@ -45,11 +45,7 @@ where index % 8 }; let mask = 1 << bit_index; - if val { - byte | mask - } else { - byte & !mask - } + if val { byte | mask } else { byte & !mask } } #[inline] pub fn set_bit(&mut self, index: usize, val: bool) { diff --git a/ebpf/aya-ebpf-bindings/src/armv7/bindings.rs b/ebpf/aya-ebpf-bindings/src/armv7/bindings.rs index cd13c213..33124867 100644 --- a/ebpf/aya-ebpf-bindings/src/armv7/bindings.rs +++ b/ebpf/aya-ebpf-bindings/src/armv7/bindings.rs @@ -45,11 +45,7 @@ where index % 8 }; let mask = 1 << bit_index; - if val { - byte | mask - } else { - byte & !mask - } + if val { byte | mask } else { byte & !mask } } #[inline] pub fn set_bit(&mut self, index: usize, val: bool) { diff --git a/ebpf/aya-ebpf-bindings/src/lib.rs b/ebpf/aya-ebpf-bindings/src/lib.rs index 15d37b88..94ef8a52 100644 --- a/ebpf/aya-ebpf-bindings/src/lib.rs +++ b/ebpf/aya-ebpf-bindings/src/lib.rs @@ -3,7 +3,8 @@ dead_code, non_camel_case_types, non_snake_case, - non_upper_case_globals + non_upper_case_globals, + unsafe_op_in_unsafe_fn )] #![deny(warnings)] #![no_std] @@ -29,7 +30,7 @@ mod s390x; #[cfg(bpf_target_arch = "mips")] mod mips; -mod gen { +mod generated { #[cfg(bpf_target_arch = "aarch64")] pub use super::aarch64::*; #[cfg(bpf_target_arch = "arm")] @@ -45,21 +46,21 @@ mod gen { #[cfg(bpf_target_arch = "x86_64")] pub use super::x86_64::*; } -pub use gen::helpers; +pub use generated::helpers; pub mod bindings { - pub use crate::gen::bindings::*; + pub use crate::generated::bindings::*; - pub const TC_ACT_OK: i32 = crate::gen::bindings::TC_ACT_OK as i32; - pub const TC_ACT_RECLASSIFY: i32 = crate::gen::bindings::TC_ACT_RECLASSIFY as i32; - pub const TC_ACT_SHOT: i32 = crate::gen::bindings::TC_ACT_SHOT as i32; - pub const TC_ACT_PIPE: i32 = crate::gen::bindings::TC_ACT_PIPE as i32; - pub const TC_ACT_STOLEN: i32 = crate::gen::bindings::TC_ACT_STOLEN as i32; - pub const TC_ACT_QUEUED: i32 = crate::gen::bindings::TC_ACT_QUEUED as i32; - pub const TC_ACT_REPEAT: i32 = crate::gen::bindings::TC_ACT_REPEAT as i32; - pub const TC_ACT_REDIRECT: i32 = crate::gen::bindings::TC_ACT_REDIRECT as i32; - pub const TC_ACT_TRAP: i32 = crate::gen::bindings::TC_ACT_TRAP as i32; - pub const TC_ACT_VALUE_MAX: i32 = crate::gen::bindings::TC_ACT_VALUE_MAX as i32; + pub const TC_ACT_OK: i32 = crate::generated::bindings::TC_ACT_OK as i32; + pub const TC_ACT_RECLASSIFY: i32 = crate::generated::bindings::TC_ACT_RECLASSIFY as i32; + pub const TC_ACT_SHOT: i32 = crate::generated::bindings::TC_ACT_SHOT as i32; + pub const TC_ACT_PIPE: i32 = crate::generated::bindings::TC_ACT_PIPE as i32; + pub const TC_ACT_STOLEN: i32 = crate::generated::bindings::TC_ACT_STOLEN as i32; + pub const TC_ACT_QUEUED: i32 = crate::generated::bindings::TC_ACT_QUEUED as i32; + pub const TC_ACT_REPEAT: i32 = crate::generated::bindings::TC_ACT_REPEAT as i32; + pub const TC_ACT_REDIRECT: i32 = crate::generated::bindings::TC_ACT_REDIRECT as i32; + pub const TC_ACT_TRAP: i32 = crate::generated::bindings::TC_ACT_TRAP as i32; + pub const TC_ACT_VALUE_MAX: i32 = crate::generated::bindings::TC_ACT_VALUE_MAX as i32; pub const TC_ACT_EXT_VAL_MASK: i32 = 268435455; #[repr(C)] diff --git a/ebpf/aya-ebpf-bindings/src/mips/bindings.rs b/ebpf/aya-ebpf-bindings/src/mips/bindings.rs index 4bc8f8fe..93bc0b79 100644 --- a/ebpf/aya-ebpf-bindings/src/mips/bindings.rs +++ b/ebpf/aya-ebpf-bindings/src/mips/bindings.rs @@ -45,11 +45,7 @@ where index % 8 }; let mask = 1 << bit_index; - if val { - byte | mask - } else { - byte & !mask - } + if val { byte | mask } else { byte & !mask } } #[inline] pub fn set_bit(&mut self, index: usize, val: bool) { diff --git a/ebpf/aya-ebpf-bindings/src/powerpc64/bindings.rs b/ebpf/aya-ebpf-bindings/src/powerpc64/bindings.rs index f94e3b0c..9d9481ca 100644 --- a/ebpf/aya-ebpf-bindings/src/powerpc64/bindings.rs +++ b/ebpf/aya-ebpf-bindings/src/powerpc64/bindings.rs @@ -45,11 +45,7 @@ where index % 8 }; let mask = 1 << bit_index; - if val { - byte | mask - } else { - byte & !mask - } + if val { byte | mask } else { byte & !mask } } #[inline] pub fn set_bit(&mut self, index: usize, val: bool) { diff --git a/ebpf/aya-ebpf-bindings/src/riscv64/bindings.rs b/ebpf/aya-ebpf-bindings/src/riscv64/bindings.rs index 6b42a2be..8011f07a 100644 --- a/ebpf/aya-ebpf-bindings/src/riscv64/bindings.rs +++ b/ebpf/aya-ebpf-bindings/src/riscv64/bindings.rs @@ -45,11 +45,7 @@ where index % 8 }; let mask = 1 << bit_index; - if val { - byte | mask - } else { - byte & !mask - } + if val { byte | mask } else { byte & !mask } } #[inline] pub fn set_bit(&mut self, index: usize, val: bool) { diff --git a/ebpf/aya-ebpf-bindings/src/s390x/bindings.rs b/ebpf/aya-ebpf-bindings/src/s390x/bindings.rs index bc5f3fa6..02e1a27d 100644 --- a/ebpf/aya-ebpf-bindings/src/s390x/bindings.rs +++ b/ebpf/aya-ebpf-bindings/src/s390x/bindings.rs @@ -45,11 +45,7 @@ where index % 8 }; let mask = 1 << bit_index; - if val { - byte | mask - } else { - byte & !mask - } + if val { byte | mask } else { byte & !mask } } #[inline] pub fn set_bit(&mut self, index: usize, val: bool) { diff --git a/ebpf/aya-ebpf-bindings/src/x86_64/bindings.rs b/ebpf/aya-ebpf-bindings/src/x86_64/bindings.rs index b0cab6d7..6d4abd9e 100644 --- a/ebpf/aya-ebpf-bindings/src/x86_64/bindings.rs +++ b/ebpf/aya-ebpf-bindings/src/x86_64/bindings.rs @@ -45,11 +45,7 @@ where index % 8 }; let mask = 1 << bit_index; - if val { - byte | mask - } else { - byte & !mask - } + if val { byte | mask } else { byte & !mask } } #[inline] pub fn set_bit(&mut self, index: usize, val: bool) { diff --git a/ebpf/aya-ebpf-cty/Cargo.toml b/ebpf/aya-ebpf-cty/Cargo.toml index 2f8bb64e..143fb8fe 100644 --- a/ebpf/aya-ebpf-cty/Cargo.toml +++ b/ebpf/aya-ebpf-cty/Cargo.toml @@ -8,4 +8,5 @@ authors.workspace = true license.workspace = true repository.workspace = true homepage.workspace = true +rust-version.workspace = true edition.workspace = true diff --git a/ebpf/aya-ebpf-cty/build.rs b/ebpf/aya-ebpf-cty/build.rs index 7272a315..40533d3d 100644 --- a/ebpf/aya-ebpf-cty/build.rs +++ b/ebpf/aya-ebpf-cty/build.rs @@ -12,6 +12,8 @@ fn main() { } println!("cargo:rustc-cfg=bpf_target_arch=\"{arch}\""); } - println!("cargo::rustc-check-cfg=cfg(bpf_target_arch, values(\"x86_64\",\"arm\",\"aarch64\",\"riscv64\",\"powerpc64\",\"s390x\",\"mips\"))"); + println!( + "cargo::rustc-check-cfg=cfg(bpf_target_arch, values(\"x86_64\",\"arm\",\"aarch64\",\"riscv64\",\"powerpc64\",\"s390x\",\"mips\"))" + ); println!("cargo::rustc-check-cfg=cfg(target_arch, values(\"asmjs\",\"nvptx\",\"xtensa\"))"); } diff --git a/ebpf/aya-ebpf/Cargo.toml b/ebpf/aya-ebpf/Cargo.toml index 3495ddf5..8c9e00fb 100644 --- a/ebpf/aya-ebpf/Cargo.toml +++ b/ebpf/aya-ebpf/Cargo.toml @@ -6,6 +6,7 @@ authors.workspace = true license.workspace = true repository.workspace = true homepage.workspace = true +rust-version.workspace = true edition.workspace = true [dependencies] diff --git a/ebpf/aya-ebpf/build.rs b/ebpf/aya-ebpf/build.rs index d5033614..97b86ae1 100644 --- a/ebpf/aya-ebpf/build.rs +++ b/ebpf/aya-ebpf/build.rs @@ -13,7 +13,9 @@ fn main() { } println!("cargo:rustc-cfg=bpf_target_arch=\"{arch}\""); } - println!("cargo::rustc-check-cfg=cfg(bpf_target_arch, values(\"x86_64\",\"arm\",\"aarch64\",\"riscv64\",\"powerpc64\",\"s390x\",\"mips\"))"); + println!( + "cargo::rustc-check-cfg=cfg(bpf_target_arch, values(\"x86_64\",\"arm\",\"aarch64\",\"riscv64\",\"powerpc64\",\"s390x\",\"mips\"))" + ); println!("cargo::rustc-check-cfg=cfg(unstable)"); } diff --git a/ebpf/aya-ebpf/src/args.rs b/ebpf/aya-ebpf/src/args.rs index d39a232e..5fca6d35 100644 --- a/ebpf/aya-ebpf/src/args.rs +++ b/ebpf/aya-ebpf/src/args.rs @@ -39,7 +39,8 @@ unsafe impl FromBtfArgument for *const T { unsafe fn from_argument(ctx: *const c_void, n: usize) -> *const T { // BTF arguments are exposed as an array of `usize` where `usize` can // either be treated as a pointer or a primitive type - *(ctx as *const usize).add(n) as _ + let ctx: *const usize = ctx.cast(); + (unsafe { *ctx.add(n) }) as _ } } @@ -50,7 +51,8 @@ macro_rules! unsafe_impl_from_btf_argument { unsafe fn from_argument(ctx: *const c_void, n: usize) -> Self { // BTF arguments are exposed as an array of `usize` where `usize` can // either be treated as a pointer or a primitive type - *(ctx as *const usize).add(n) as _ + let ctx: *const usize = ctx.cast(); + (unsafe { *ctx.add(n) }) as _ } } }; @@ -507,8 +509,8 @@ impl RawTracepointArgs { /// /// The caller is responsible for ensuring they have accurate knowledge of the arguments /// and their respective types for the accessed tracepoint context. - pub unsafe fn arg(&self, n: usize) -> *const T { - &T::from_argument(&*self.args, n) + pub unsafe fn arg(&self, n: usize) -> T { + unsafe { T::from_argument(&*self.args, n) } } } @@ -554,7 +556,7 @@ unsafe impl FromRawTracepointArgs for *const T { // We don't know how many arguments are there for the given tracepoint, // so we just assume that the slice has at least n elements. The whole // assumntion and implementation is unsafe. - ctx.args.as_slice(n + 1)[n] as *const _ + (unsafe { ctx.args.as_slice(n + 1) })[n] as _ } } @@ -562,7 +564,7 @@ macro_rules! unsafe_impl_from_raw_tracepoint_args { ($type:ident) => { unsafe impl FromRawTracepointArgs for $type { unsafe fn from_argument(ctx: &bpf_raw_tracepoint_args, n: usize) -> Self { - ctx.args.as_slice(n + 1)[n] as _ + (unsafe { ctx.args.as_slice(n + 1) })[n] as _ } } }; diff --git a/ebpf/aya-ebpf/src/helpers.rs b/ebpf/aya-ebpf/src/helpers.rs index c6f4e282..be009e90 100644 --- a/ebpf/aya-ebpf/src/helpers.rs +++ b/ebpf/aya-ebpf/src/helpers.rs @@ -15,9 +15,9 @@ use core::{ mem::{self, MaybeUninit}, }; -pub use aya_ebpf_bindings::helpers as gen; +pub use aya_ebpf_bindings::helpers as generated; #[doc(hidden)] -pub use gen::*; +pub use generated::*; use crate::{ check_bounds_signed, @@ -52,7 +52,7 @@ use crate::{ #[inline] pub unsafe fn bpf_probe_read(src: *const T) -> Result { let mut v: MaybeUninit = MaybeUninit::uninit(); - let ret = gen::bpf_probe_read( + let ret = generated::bpf_probe_read( v.as_mut_ptr() as *mut c_void, mem::size_of::() as u32, src as *const c_void, @@ -88,16 +88,12 @@ pub unsafe fn bpf_probe_read(src: *const T) -> Result { /// On failure, this function returns a negative value wrapped in an `Err`. #[inline] pub unsafe fn bpf_probe_read_buf(src: *const u8, dst: &mut [u8]) -> Result<(), c_long> { - let ret = gen::bpf_probe_read( + let ret = generated::bpf_probe_read( dst.as_mut_ptr() as *mut c_void, dst.len() as u32, src as *const c_void, ); - if ret == 0 { - Ok(()) - } else { - Err(ret) - } + if ret == 0 { Ok(()) } else { Err(ret) } } /// Read bytes stored at the _user space_ pointer `src` and store them as a `T`. @@ -125,7 +121,7 @@ pub unsafe fn bpf_probe_read_buf(src: *const u8, dst: &mut [u8]) -> Result<(), c #[inline] pub unsafe fn bpf_probe_read_user(src: *const T) -> Result { let mut v: MaybeUninit = MaybeUninit::uninit(); - let ret = gen::bpf_probe_read_user( + let ret = generated::bpf_probe_read_user( v.as_mut_ptr() as *mut c_void, mem::size_of::() as u32, src as *const c_void, @@ -159,16 +155,12 @@ pub unsafe fn bpf_probe_read_user(src: *const T) -> Result { /// On failure, this function returns a negative value wrapped in an `Err`. #[inline] pub unsafe fn bpf_probe_read_user_buf(src: *const u8, dst: &mut [u8]) -> Result<(), c_long> { - let ret = gen::bpf_probe_read_user( + let ret = generated::bpf_probe_read_user( dst.as_mut_ptr() as *mut c_void, dst.len() as u32, src as *const c_void, ); - if ret == 0 { - Ok(()) - } else { - Err(ret) - } + if ret == 0 { Ok(()) } else { Err(ret) } } /// Read bytes stored at the _kernel space_ pointer `src` and store them as a `T`. @@ -196,7 +188,7 @@ pub unsafe fn bpf_probe_read_user_buf(src: *const u8, dst: &mut [u8]) -> Result< #[inline] pub unsafe fn bpf_probe_read_kernel(src: *const T) -> Result { let mut v: MaybeUninit = MaybeUninit::uninit(); - let ret = gen::bpf_probe_read_kernel( + let ret = generated::bpf_probe_read_kernel( v.as_mut_ptr() as *mut c_void, mem::size_of::() as u32, src as *const c_void, @@ -230,16 +222,12 @@ pub unsafe fn bpf_probe_read_kernel(src: *const T) -> Result { /// On failure, this function returns a negative value wrapped in an `Err`. #[inline] pub unsafe fn bpf_probe_read_kernel_buf(src: *const u8, dst: &mut [u8]) -> Result<(), c_long> { - let ret = gen::bpf_probe_read_kernel( + let ret = generated::bpf_probe_read_kernel( dst.as_mut_ptr() as *mut c_void, dst.len() as u32, src as *const c_void, ); - if ret == 0 { - Ok(()) - } else { - Err(ret) - } + if ret == 0 { Ok(()) } else { Err(ret) } } /// Read a null-terminated string stored at `src` into `dest`. @@ -273,7 +261,7 @@ pub unsafe fn bpf_probe_read_kernel_buf(src: *const u8, dst: &mut [u8]) -> Resul )] #[inline] pub unsafe fn bpf_probe_read_str(src: *const u8, dest: &mut [u8]) -> Result { - let len = gen::bpf_probe_read_str( + let len = generated::bpf_probe_read_str( dest.as_mut_ptr() as *mut c_void, dest.len() as u32, src as *const c_void, @@ -309,7 +297,7 @@ pub unsafe fn bpf_probe_read_str(src: *const u8, dest: &mut [u8]) -> Result Result { - let len = gen::bpf_probe_read_user_str( + let len = generated::bpf_probe_read_user_str( dest.as_mut_ptr() as *mut c_void, dest.len() as u32, src as *const c_void, @@ -356,7 +344,7 @@ pub unsafe fn bpf_probe_read_user_str(src: *const u8, dest: &mut [u8]) -> Result /// } /// /// #[map] -/// pub static mut BUF: PerCpuArray = PerCpuArray::with_max_entries(1, 0); +/// pub static BUF: PerCpuArray = PerCpuArray::with_max_entries(1, 0); /// /// # fn try_test() -> Result<(), c_long> { /// # let user_ptr: *const u8 = 0 as _; @@ -375,7 +363,6 @@ pub unsafe fn bpf_probe_read_user_str(src: *const u8, dest: &mut [u8]) -> Result /// [core::str::from_utf8_unchecked]: /// /// ```no_run -/// # #![expect(dead_code)] /// # use aya_ebpf::{cty::c_long, helpers::bpf_probe_read_user_str_bytes}; /// # use aya_ebpf::{macros::map, maps::PerCpuArray}; /// # #[repr(C)] @@ -383,7 +370,7 @@ pub unsafe fn bpf_probe_read_user_str(src: *const u8, dest: &mut [u8]) -> Result /// # pub buf: [u8; 4096], /// # } /// # #[map] -/// # pub static mut BUF: PerCpuArray = PerCpuArray::with_max_entries(1, 0); +/// # pub static BUF: PerCpuArray = PerCpuArray::with_max_entries(1, 0); /// # fn try_test() -> Result<(), c_long> { /// # let user_ptr: *const u8 = 0 as _; /// # let buf = unsafe { @@ -407,7 +394,7 @@ pub unsafe fn bpf_probe_read_user_str_bytes( src: *const u8, dest: &mut [u8], ) -> Result<&[u8], c_long> { - let len = gen::bpf_probe_read_user_str( + let len = generated::bpf_probe_read_user_str( dest.as_mut_ptr() as *mut c_void, dest.len() as u32, src as *const c_void, @@ -459,7 +446,7 @@ fn read_str_bytes(len: i64, dest: &[u8]) -> Result<&[u8], c_long> { #[deprecated(note = "Use bpf_probe_read_kernel_str_bytes instead")] #[inline] pub unsafe fn bpf_probe_read_kernel_str(src: *const u8, dest: &mut [u8]) -> Result { - let len = gen::bpf_probe_read_kernel_str( + let len = generated::bpf_probe_read_kernel_str( dest.as_mut_ptr() as *mut c_void, dest.len() as u32, src as *const c_void, @@ -497,7 +484,6 @@ pub unsafe fn bpf_probe_read_kernel_str(src: *const u8, dest: &mut [u8]) -> Resu /// With a `PerCpuArray` (with size defined by us): /// /// ```no_run -/// # #![expect(dead_code)] /// # use aya_ebpf::{cty::c_long, helpers::bpf_probe_read_kernel_str_bytes}; /// use aya_ebpf::{macros::map, maps::PerCpuArray}; /// @@ -507,7 +493,7 @@ pub unsafe fn bpf_probe_read_kernel_str(src: *const u8, dest: &mut [u8]) -> Resu /// } /// /// #[map] -/// pub static mut BUF: PerCpuArray = PerCpuArray::with_max_entries(1, 0); +/// pub static BUF: PerCpuArray = PerCpuArray::with_max_entries(1, 0); /// /// # fn try_test() -> Result<(), c_long> { /// # let kernel_ptr: *const u8 = 0 as _; @@ -526,7 +512,6 @@ pub unsafe fn bpf_probe_read_kernel_str(src: *const u8, dest: &mut [u8]) -> Resu /// [core::str::from_utf8_unchecked]: /// /// ```no_run -/// # #![expect(dead_code)] /// # use aya_ebpf::{cty::c_long, helpers::bpf_probe_read_kernel_str_bytes}; /// # use aya_ebpf::{macros::map, maps::PerCpuArray}; /// # #[repr(C)] @@ -534,7 +519,7 @@ pub unsafe fn bpf_probe_read_kernel_str(src: *const u8, dest: &mut [u8]) -> Resu /// # pub buf: [u8; 4096], /// # } /// # #[map] -/// # pub static mut BUF: PerCpuArray = PerCpuArray::with_max_entries(1, 0); +/// # pub static BUF: PerCpuArray = PerCpuArray::with_max_entries(1, 0); /// # fn try_test() -> Result<(), c_long> { /// # let kernel_ptr: *const u8 = 0 as _; /// # let buf = unsafe { @@ -558,7 +543,7 @@ pub unsafe fn bpf_probe_read_kernel_str_bytes( src: *const u8, dest: &mut [u8], ) -> Result<&[u8], c_long> { - let len = gen::bpf_probe_read_kernel_str( + let len = generated::bpf_probe_read_kernel_str( dest.as_mut_ptr() as *mut c_void, dest.len() as u32, src as *const c_void, @@ -593,16 +578,12 @@ pub unsafe fn bpf_probe_read_kernel_str_bytes( /// On failure, this function returns a negative value wrapped in an `Err`. #[inline] pub unsafe fn bpf_probe_write_user(dst: *mut T, src: *const T) -> Result<(), c_long> { - let ret = gen::bpf_probe_write_user( + let ret = generated::bpf_probe_write_user( dst as *mut c_void, src as *const c_void, mem::size_of::() as u32, ); - if ret == 0 { - Ok(()) - } else { - Err(ret) - } + if ret == 0 { Ok(()) } else { Err(ret) } } /// Read the `comm` field associated with the current task struct @@ -624,12 +605,8 @@ pub unsafe fn bpf_probe_write_user(dst: *mut T, src: *const T) -> Result<(), #[inline] pub fn bpf_get_current_comm() -> Result<[u8; 16], c_long> { let mut comm: [u8; 16usize] = [0; 16]; - let ret = unsafe { gen::bpf_get_current_comm(&mut comm as *mut _ as *mut c_void, 16u32) }; - if ret == 0 { - Ok(comm) - } else { - Err(ret) - } + let ret = unsafe { generated::bpf_get_current_comm(&mut comm as *mut _ as *mut c_void, 16u32) }; + if ret == 0 { Ok(comm) } else { Err(ret) } } /// Read the process id and thread group id associated with the current task struct as @@ -657,7 +634,7 @@ pub fn bpf_get_current_comm() -> Result<[u8; 16], c_long> { /// ``` #[inline] pub fn bpf_get_current_pid_tgid() -> u64 { - unsafe { gen::bpf_get_current_pid_tgid() } + unsafe { generated::bpf_get_current_pid_tgid() } } /// Read the user id and group id associated with the current task struct as @@ -680,7 +657,7 @@ pub fn bpf_get_current_pid_tgid() -> u64 { /// ``` #[inline] pub fn bpf_get_current_uid_gid() -> u64 { - unsafe { gen::bpf_get_current_uid_gid() } + unsafe { generated::bpf_get_current_uid_gid() } } /// Prints a debug message to the BPF debugging pipe. @@ -839,7 +816,9 @@ pub unsafe fn bpf_printk_impl( 1 => printk(fmt_ptr, fmt_size, args[0]), 2 => printk(fmt_ptr, fmt_size, args[0], args[1]), 3 => printk(fmt_ptr, fmt_size, args[0], args[1], args[2]), - _ => gen::bpf_trace_vprintk(fmt_ptr, fmt_size, args.as_ptr() as _, (NUM_ARGS * 8) as _), + _ => { + generated::bpf_trace_vprintk(fmt_ptr, fmt_size, args.as_ptr() as _, (NUM_ARGS * 8) as _) + } } } @@ -860,5 +839,6 @@ pub fn bpf_strncmp(s1: &[u8; N], s2: &CStr) -> Ordering { // // NB: s1's size must be known at compile time to appease the verifier. This is also the typical // usage of strncmp in C programs. - unsafe { gen::bpf_strncmp(s1.as_ptr() as *const _, N as u32, s2.as_ptr() as *const _) }.cmp(&0) + unsafe { generated::bpf_strncmp(s1.as_ptr() as *const _, N as u32, s2.as_ptr() as *const _) } + .cmp(&0) } diff --git a/ebpf/aya-ebpf/src/lib.rs b/ebpf/aya-ebpf/src/lib.rs index 1e84f0fa..2179390b 100644 --- a/ebpf/aya-ebpf/src/lib.rs +++ b/ebpf/aya-ebpf/src/lib.rs @@ -19,7 +19,7 @@ pub use aya_ebpf_bindings::bindings; mod args; pub use args::{PtRegs, RawTracepointArgs}; -#[expect(clippy::missing_safety_doc)] +#[expect(clippy::missing_safety_doc, unsafe_op_in_unsafe_fn)] pub mod helpers; pub mod maps; pub mod programs; @@ -61,8 +61,8 @@ pub trait EbpfContext { } } -#[no_mangle] -#[expect(clippy::missing_safety_doc)] +#[unsafe(no_mangle)] +#[expect(clippy::missing_safety_doc, unsafe_op_in_unsafe_fn)] pub unsafe extern "C" fn memset(s: *mut u8, c: c_int, n: usize) { #[expect(clippy::cast_sign_loss)] let b = c as u8; @@ -71,14 +71,14 @@ pub unsafe extern "C" fn memset(s: *mut u8, c: c_int, n: usize) { } } -#[no_mangle] -#[expect(clippy::missing_safety_doc)] +#[unsafe(no_mangle)] +#[expect(clippy::missing_safety_doc, unsafe_op_in_unsafe_fn)] pub unsafe extern "C" fn memcpy(dest: *mut u8, src: *mut u8, n: usize) { copy_forward(dest, src, n); } -#[no_mangle] -#[expect(clippy::missing_safety_doc)] +#[unsafe(no_mangle)] +#[expect(clippy::missing_safety_doc, unsafe_op_in_unsafe_fn)] pub unsafe extern "C" fn memmove(dest: *mut u8, src: *mut u8, n: usize) { let delta = (dest as usize).wrapping_sub(src as usize); if delta >= n { @@ -91,6 +91,7 @@ pub unsafe extern "C" fn memmove(dest: *mut u8, src: *mut u8, n: usize) { } #[inline(always)] +#[expect(unsafe_op_in_unsafe_fn)] unsafe fn copy_forward(dest: *mut u8, src: *mut u8, n: usize) { for i in 0..n { *dest.add(i) = *src.add(i); @@ -98,6 +99,7 @@ unsafe fn copy_forward(dest: *mut u8, src: *mut u8, n: usize) { } #[inline(always)] +#[expect(unsafe_op_in_unsafe_fn)] unsafe fn copy_backward(dest: *mut u8, src: *mut u8, n: usize) { for i in (0..n).rev() { *dest.add(i) = *src.add(i); diff --git a/ebpf/aya-ebpf/src/maps/hash_map.rs b/ebpf/aya-ebpf/src/maps/hash_map.rs index a39615d1..f6efa8b2 100644 --- a/ebpf/aya-ebpf/src/maps/hash_map.rs +++ b/ebpf/aya-ebpf/src/maps/hash_map.rs @@ -57,7 +57,7 @@ impl HashMap { /// element in the map, causing garbage to be read, or corruption in case of writes. #[inline] pub unsafe fn get(&self, key: &K) -> Option<&V> { - get(self.def.get(), key) + unsafe { get(self.def.get(), key) } } /// Retrieve the value associate with `key` from the map. @@ -133,7 +133,7 @@ impl LruHashMap { /// element in the map, causing garbage to be read, or corruption in case of writes. #[inline] pub unsafe fn get(&self, key: &K) -> Option<&V> { - get(self.def.get(), key) + unsafe { get(self.def.get(), key) } } /// Retrieve the value associate with `key` from the map. @@ -209,7 +209,7 @@ impl PerCpuHashMap { /// element in the map, causing garbage to be read, or corruption in case of writes. #[inline] pub unsafe fn get(&self, key: &K) -> Option<&V> { - get(self.def.get(), key) + unsafe { get(self.def.get(), key) } } /// Retrieve the value associate with `key` from the map. @@ -285,7 +285,7 @@ impl LruPerCpuHashMap { /// element in the map, causing garbage to be read, or corruption in case of writes. #[inline] pub unsafe fn get(&self, key: &K) -> Option<&V> { - get(self.def.get(), key) + unsafe { get(self.def.get(), key) } } /// Retrieve the value associate with `key` from the map. @@ -340,5 +340,5 @@ fn get_ptr(def: *mut bpf_map_def, key: &K) -> Option<*const V> { #[inline] unsafe fn get<'a, K, V>(def: *mut bpf_map_def, key: &K) -> Option<&'a V> { - get_ptr(def, key).map(|p| &*p) + get_ptr(def, key).map(|p| unsafe { &*p }) } diff --git a/ebpf/aya-ebpf/src/maps/perf/perf_event_array.rs b/ebpf/aya-ebpf/src/maps/perf/perf_event_array.rs index e8caf0b5..1723c5f5 100644 --- a/ebpf/aya-ebpf/src/maps/perf/perf_event_array.rs +++ b/ebpf/aya-ebpf/src/maps/perf/perf_event_array.rs @@ -1,10 +1,10 @@ use core::{cell::UnsafeCell, marker::PhantomData, mem}; use crate::{ - bindings::{bpf_map_def, bpf_map_type::BPF_MAP_TYPE_PERF_EVENT_ARRAY, BPF_F_CURRENT_CPU}, + EbpfContext, + bindings::{BPF_F_CURRENT_CPU, bpf_map_def, bpf_map_type::BPF_MAP_TYPE_PERF_EVENT_ARRAY}, helpers::bpf_perf_event_output, maps::PinningType, - EbpfContext, }; #[repr(transparent)] diff --git a/ebpf/aya-ebpf/src/maps/perf/perf_event_byte_array.rs b/ebpf/aya-ebpf/src/maps/perf/perf_event_byte_array.rs index 8c877139..deb0447e 100644 --- a/ebpf/aya-ebpf/src/maps/perf/perf_event_byte_array.rs +++ b/ebpf/aya-ebpf/src/maps/perf/perf_event_byte_array.rs @@ -1,10 +1,10 @@ use core::{cell::UnsafeCell, mem}; use crate::{ - bindings::{bpf_map_def, bpf_map_type::BPF_MAP_TYPE_PERF_EVENT_ARRAY, BPF_F_CURRENT_CPU}, + EbpfContext, + bindings::{BPF_F_CURRENT_CPU, bpf_map_def, bpf_map_type::BPF_MAP_TYPE_PERF_EVENT_ARRAY}, helpers::bpf_perf_event_output, maps::PinningType, - EbpfContext, }; #[repr(transparent)] diff --git a/ebpf/aya-ebpf/src/maps/program_array.rs b/ebpf/aya-ebpf/src/maps/program_array.rs index 334420ef..d59df8ae 100644 --- a/ebpf/aya-ebpf/src/maps/program_array.rs +++ b/ebpf/aya-ebpf/src/maps/program_array.rs @@ -3,10 +3,10 @@ use core::{cell::UnsafeCell, hint::unreachable_unchecked, mem}; use aya_ebpf_cty::c_long; use crate::{ + EbpfContext, bindings::{bpf_map_def, bpf_map_type::BPF_MAP_TYPE_PROG_ARRAY}, helpers::bpf_tail_call, maps::PinningType, - EbpfContext, }; /// A BPF map that stores an array of program indices for tail calling. @@ -82,11 +82,11 @@ impl ProgramArray { /// On failure, a negative error is returned, wrapped in `Err()`. #[cfg(not(unstable))] pub unsafe fn tail_call(&self, ctx: &C, index: u32) -> Result<(), c_long> { - let res = bpf_tail_call(ctx.as_ptr(), self.def.get() as *mut _, index); + let res = unsafe { bpf_tail_call(ctx.as_ptr(), self.def.get().cast(), index) }; if res != 0 { Err(res) } else { - unreachable_unchecked() + unsafe { unreachable_unchecked() } } } @@ -105,11 +105,11 @@ impl ProgramArray { /// On failure, a negative error is returned, wrapped in `Err()`. #[cfg(unstable)] pub unsafe fn tail_call(&self, ctx: &C, index: u32) -> Result { - let res = bpf_tail_call(ctx.as_ptr(), self.def.get() as *mut _, index); + let res = unsafe { bpf_tail_call(ctx.as_ptr(), self.def.get().cast(), index) }; if res != 0 { Err(res) } else { - unreachable_unchecked() + unsafe { unreachable_unchecked() } } } } diff --git a/ebpf/aya-ebpf/src/maps/ring_buf.rs b/ebpf/aya-ebpf/src/maps/ring_buf.rs index 679b65c8..e7db9a53 100644 --- a/ebpf/aya-ebpf/src/maps/ring_buf.rs +++ b/ebpf/aya-ebpf/src/maps/ring_buf.rs @@ -155,11 +155,7 @@ impl RingBuf { flags, ) }; - if ret < 0 { - Err(ret) - } else { - Ok(()) - } + if ret < 0 { Err(ret) } else { Ok(()) } } /// Query various information about the ring buffer. diff --git a/ebpf/aya-ebpf/src/maps/sock_hash.rs b/ebpf/aya-ebpf/src/maps/sock_hash.rs index d72dcd5d..9f01b2ec 100644 --- a/ebpf/aya-ebpf/src/maps/sock_hash.rs +++ b/ebpf/aya-ebpf/src/maps/sock_hash.rs @@ -3,6 +3,7 @@ use core::{borrow::Borrow, cell::UnsafeCell, marker::PhantomData, mem}; use aya_ebpf_cty::c_void; use crate::{ + EbpfContext, bindings::{bpf_map_def, bpf_map_type::BPF_MAP_TYPE_SOCKHASH, bpf_sock_ops}, helpers::{ bpf_msg_redirect_hash, bpf_sk_assign, bpf_sk_redirect_hash, bpf_sk_release, @@ -11,7 +12,6 @@ use crate::{ lookup, maps::PinningType, programs::{SkBuffContext, SkLookupContext, SkMsgContext}, - EbpfContext, }; #[repr(transparent)] diff --git a/ebpf/aya-ebpf/src/maps/sock_map.rs b/ebpf/aya-ebpf/src/maps/sock_map.rs index eb1822e2..4093a1ba 100644 --- a/ebpf/aya-ebpf/src/maps/sock_map.rs +++ b/ebpf/aya-ebpf/src/maps/sock_map.rs @@ -1,8 +1,7 @@ use core::{cell::UnsafeCell, mem}; -use aya_ebpf_cty::c_void; - use crate::{ + EbpfContext, bindings::{bpf_map_def, bpf_map_type::BPF_MAP_TYPE_SOCKMAP, bpf_sock_ops}, helpers::{ bpf_msg_redirect_map, bpf_sk_assign, bpf_sk_redirect_map, bpf_sk_release, @@ -11,7 +10,6 @@ use crate::{ lookup, maps::PinningType, programs::{SkBuffContext, SkLookupContext, SkMsgContext}, - EbpfContext, }; #[repr(transparent)] @@ -57,37 +55,20 @@ impl SockMap { sk_ops: *mut bpf_sock_ops, flags: u64, ) -> Result<(), i64> { - let ret = bpf_sock_map_update( - sk_ops, - self.def.get() as *mut _, - &mut index as *mut _ as *mut c_void, - flags, - ); - if ret == 0 { - Ok(()) - } else { - Err(ret) - } + let index: *mut _ = &mut index; + let ret = + unsafe { bpf_sock_map_update(sk_ops, self.def.get().cast(), index.cast(), flags) }; + if ret == 0 { Ok(()) } else { Err(ret) } } #[expect(clippy::missing_safety_doc)] pub unsafe fn redirect_msg(&self, ctx: &SkMsgContext, index: u32, flags: u64) -> i64 { - bpf_msg_redirect_map( - ctx.as_ptr() as *mut _, - self.def.get() as *mut _, - index, - flags, - ) + unsafe { bpf_msg_redirect_map(ctx.as_ptr().cast(), self.def.get().cast(), index, flags) } } #[expect(clippy::missing_safety_doc)] pub unsafe fn redirect_skb(&self, ctx: &SkBuffContext, index: u32, flags: u64) -> i64 { - bpf_sk_redirect_map( - ctx.as_ptr() as *mut _, - self.def.get() as *mut _, - index, - flags, - ) + unsafe { bpf_sk_redirect_map(ctx.as_ptr().cast(), self.def.get().cast(), index, flags) } } pub fn redirect_sk_lookup( diff --git a/ebpf/aya-ebpf/src/maps/stack_trace.rs b/ebpf/aya-ebpf/src/maps/stack_trace.rs index 9de8ff4b..f7010a99 100644 --- a/ebpf/aya-ebpf/src/maps/stack_trace.rs +++ b/ebpf/aya-ebpf/src/maps/stack_trace.rs @@ -1,10 +1,10 @@ use core::{cell::UnsafeCell, mem}; use crate::{ + EbpfContext, bindings::{bpf_map_def, bpf_map_type::BPF_MAP_TYPE_STACK_TRACE}, helpers::bpf_get_stackid, maps::PinningType, - EbpfContext, }; #[repr(transparent)] @@ -47,11 +47,7 @@ impl StackTrace { #[expect(clippy::missing_safety_doc)] pub unsafe fn get_stackid(&self, ctx: &C, flags: u64) -> Result { - let ret = bpf_get_stackid(ctx.as_ptr(), self.def.get() as *mut _, flags); - if ret < 0 { - Err(ret) - } else { - Ok(ret) - } + let ret = unsafe { bpf_get_stackid(ctx.as_ptr(), self.def.get().cast(), flags) }; + if ret < 0 { Err(ret) } else { Ok(ret) } } } diff --git a/ebpf/aya-ebpf/src/programs/device.rs b/ebpf/aya-ebpf/src/programs/device.rs index 899aa7fc..b86071e8 100644 --- a/ebpf/aya-ebpf/src/programs/device.rs +++ b/ebpf/aya-ebpf/src/programs/device.rs @@ -1,6 +1,6 @@ use core::ffi::c_void; -use crate::{bindings::bpf_cgroup_dev_ctx, EbpfContext}; +use crate::{EbpfContext, bindings::bpf_cgroup_dev_ctx}; pub struct DeviceContext { pub device: *mut bpf_cgroup_dev_ctx, diff --git a/ebpf/aya-ebpf/src/programs/fentry.rs b/ebpf/aya-ebpf/src/programs/fentry.rs index 3bf7113a..00060b26 100644 --- a/ebpf/aya-ebpf/src/programs/fentry.rs +++ b/ebpf/aya-ebpf/src/programs/fentry.rs @@ -1,6 +1,6 @@ use core::ffi::c_void; -use crate::{args::FromBtfArgument, EbpfContext}; +use crate::{EbpfContext, args::FromBtfArgument}; pub struct FEntryContext { ctx: *mut c_void, @@ -33,7 +33,7 @@ impl FEntryContext { /// ``` #[expect(clippy::missing_safety_doc)] pub unsafe fn arg(&self, n: usize) -> T { - T::from_argument(self.ctx as *const _, n) + unsafe { T::from_argument(self.ctx.cast(), n) } } } diff --git a/ebpf/aya-ebpf/src/programs/fexit.rs b/ebpf/aya-ebpf/src/programs/fexit.rs index 081c204e..46ff2f57 100644 --- a/ebpf/aya-ebpf/src/programs/fexit.rs +++ b/ebpf/aya-ebpf/src/programs/fexit.rs @@ -1,6 +1,6 @@ use core::ffi::c_void; -use crate::{args::FromBtfArgument, EbpfContext}; +use crate::{EbpfContext, args::FromBtfArgument}; pub struct FExitContext { ctx: *mut c_void, @@ -33,7 +33,7 @@ impl FExitContext { /// ``` #[expect(clippy::missing_safety_doc)] pub unsafe fn arg(&self, n: usize) -> T { - T::from_argument(self.ctx as *const _, n) + unsafe { T::from_argument(self.ctx.cast(), n) } } } diff --git a/ebpf/aya-ebpf/src/programs/lsm.rs b/ebpf/aya-ebpf/src/programs/lsm.rs index 82325676..88f094ec 100644 --- a/ebpf/aya-ebpf/src/programs/lsm.rs +++ b/ebpf/aya-ebpf/src/programs/lsm.rs @@ -1,6 +1,6 @@ use core::ffi::c_void; -use crate::{args::FromBtfArgument, EbpfContext}; +use crate::{EbpfContext, args::FromBtfArgument}; pub struct LsmContext { ctx: *mut c_void, @@ -53,7 +53,7 @@ impl LsmContext { /// /// [1]: https://elixir.bootlin.com/linux/latest/source/include/linux/lsm_hook_defs.h pub unsafe fn arg(&self, n: usize) -> T { - T::from_argument(self.ctx as *const _, n) + unsafe { T::from_argument(self.ctx.cast(), n) } } } diff --git a/ebpf/aya-ebpf/src/programs/probe.rs b/ebpf/aya-ebpf/src/programs/probe.rs index 79e93f1d..e17abd51 100644 --- a/ebpf/aya-ebpf/src/programs/probe.rs +++ b/ebpf/aya-ebpf/src/programs/probe.rs @@ -13,7 +13,7 @@ use crate::bindings::user_pt_regs as pt_regs; // riscv64 uses user_regs_struct instead of pt_regs #[cfg(bpf_target_arch = "riscv64")] use crate::bindings::user_regs_struct as pt_regs; -use crate::{args::FromPtRegs, EbpfContext}; +use crate::{EbpfContext, args::FromPtRegs}; pub struct ProbeContext { pub regs: *mut pt_regs, diff --git a/ebpf/aya-ebpf/src/programs/raw_tracepoint.rs b/ebpf/aya-ebpf/src/programs/raw_tracepoint.rs index e19721c2..e9b73fff 100644 --- a/ebpf/aya-ebpf/src/programs/raw_tracepoint.rs +++ b/ebpf/aya-ebpf/src/programs/raw_tracepoint.rs @@ -1,6 +1,6 @@ use core::ffi::c_void; -use crate::{args::FromRawTracepointArgs, bindings::bpf_raw_tracepoint_args, EbpfContext}; +use crate::{EbpfContext, args::FromRawTracepointArgs, bindings::bpf_raw_tracepoint_args}; pub struct RawTracePointContext { ctx: *mut bpf_raw_tracepoint_args, @@ -8,19 +8,17 @@ pub struct RawTracePointContext { impl RawTracePointContext { pub fn new(ctx: *mut c_void) -> RawTracePointContext { - RawTracePointContext { - ctx: ctx as *mut bpf_raw_tracepoint_args, - } + RawTracePointContext { ctx: ctx.cast() } } #[expect(clippy::missing_safety_doc)] pub unsafe fn arg(&self, n: usize) -> T { - T::from_argument(&*self.ctx, n) + unsafe { T::from_argument(&*self.ctx, n) } } } impl EbpfContext for RawTracePointContext { fn as_ptr(&self) -> *mut c_void { - self.ctx as *mut c_void + self.ctx.cast() } } diff --git a/ebpf/aya-ebpf/src/programs/retprobe.rs b/ebpf/aya-ebpf/src/programs/retprobe.rs index 75c949e2..3ba9696e 100644 --- a/ebpf/aya-ebpf/src/programs/retprobe.rs +++ b/ebpf/aya-ebpf/src/programs/retprobe.rs @@ -13,7 +13,7 @@ use crate::bindings::user_pt_regs as pt_regs; // riscv64 uses user_regs_struct instead of pt_regs #[cfg(bpf_target_arch = "riscv64")] use crate::bindings::user_regs_struct as pt_regs; -use crate::{args::FromPtRegs, EbpfContext}; +use crate::{EbpfContext, args::FromPtRegs}; pub struct RetProbeContext { pub regs: *mut pt_regs, diff --git a/ebpf/aya-ebpf/src/programs/sk_buff.rs b/ebpf/aya-ebpf/src/programs/sk_buff.rs index a1bdba4d..46fd9cb6 100644 --- a/ebpf/aya-ebpf/src/programs/sk_buff.rs +++ b/ebpf/aya-ebpf/src/programs/sk_buff.rs @@ -10,7 +10,7 @@ use aya_ebpf_bindings::helpers::{ }; use aya_ebpf_cty::c_long; -use crate::{bindings::__sk_buff, EbpfContext}; +use crate::{EbpfContext, bindings::__sk_buff}; pub struct SkBuff { pub skb: *mut __sk_buff, @@ -99,11 +99,7 @@ impl SkBuff { len_u32, ) }; - if ret == 0 { - Ok(len) - } else { - Err(ret) - } + if ret == 0 { Ok(len) } else { Err(ret) } } #[inline] @@ -116,11 +112,7 @@ impl SkBuff { mem::size_of::() as u32, flags, ); - if ret == 0 { - Ok(()) - } else { - Err(ret) - } + if ret == 0 { Ok(()) } else { Err(ret) } } } @@ -134,11 +126,7 @@ impl SkBuff { ) -> Result<(), c_long> { unsafe { let ret = bpf_l3_csum_replace(self.skb as *mut _, offset as u32, from, to, size); - if ret == 0 { - Ok(()) - } else { - Err(ret) - } + if ret == 0 { Ok(()) } else { Err(ret) } } } @@ -152,52 +140,32 @@ impl SkBuff { ) -> Result<(), c_long> { unsafe { let ret = bpf_l4_csum_replace(self.skb as *mut _, offset as u32, from, to, flags); - if ret == 0 { - Ok(()) - } else { - Err(ret) - } + if ret == 0 { Ok(()) } else { Err(ret) } } } #[inline] pub fn adjust_room(&self, len_diff: i32, mode: u32, flags: u64) -> Result<(), c_long> { let ret = unsafe { bpf_skb_adjust_room(self.as_ptr() as *mut _, len_diff, mode, flags) }; - if ret == 0 { - Ok(()) - } else { - Err(ret) - } + if ret == 0 { Ok(()) } else { Err(ret) } } #[inline] pub fn clone_redirect(&self, if_index: u32, flags: u64) -> Result<(), c_long> { let ret = unsafe { bpf_clone_redirect(self.as_ptr() as *mut _, if_index, flags) }; - if ret == 0 { - Ok(()) - } else { - Err(ret) - } + if ret == 0 { Ok(()) } else { Err(ret) } } #[inline] pub fn change_proto(&self, proto: u16, flags: u64) -> Result<(), c_long> { let ret = unsafe { bpf_skb_change_proto(self.as_ptr() as *mut _, proto, flags) }; - if ret == 0 { - Ok(()) - } else { - Err(ret) - } + if ret == 0 { Ok(()) } else { Err(ret) } } #[inline] pub fn change_type(&self, ty: u32) -> Result<(), c_long> { let ret = unsafe { bpf_skb_change_type(self.as_ptr() as *mut _, ty) }; - if ret == 0 { - Ok(()) - } else { - Err(ret) - } + if ret == 0 { Ok(()) } else { Err(ret) } } /// Pulls in non-linear data in case the skb is non-linear. @@ -208,11 +176,7 @@ impl SkBuff { #[inline(always)] pub fn pull_data(&self, len: u32) -> Result<(), c_long> { let ret = unsafe { bpf_skb_pull_data(self.as_ptr() as *mut _, len) }; - if ret == 0 { - Ok(()) - } else { - Err(ret) - } + if ret == 0 { Ok(()) } else { Err(ret) } } pub(crate) fn as_ptr(&self) -> *mut c_void { @@ -333,7 +297,7 @@ impl SkBuffContext { /// } /// /// #[map] - /// pub static mut BUF: PerCpuArray = PerCpuArray::with_max_entries(1, 0); + /// pub static BUF: PerCpuArray = PerCpuArray::with_max_entries(1, 0); /// /// fn try_cgroup_skb(ctx: SkBuffContext) -> Result { /// let buf = unsafe { diff --git a/ebpf/aya-ebpf/src/programs/sk_lookup.rs b/ebpf/aya-ebpf/src/programs/sk_lookup.rs index 02532f57..1a28697b 100644 --- a/ebpf/aya-ebpf/src/programs/sk_lookup.rs +++ b/ebpf/aya-ebpf/src/programs/sk_lookup.rs @@ -1,6 +1,6 @@ use core::ffi::c_void; -use crate::{bindings::bpf_sk_lookup, EbpfContext}; +use crate::{EbpfContext, bindings::bpf_sk_lookup}; pub struct SkLookupContext { pub lookup: *mut bpf_sk_lookup, diff --git a/ebpf/aya-ebpf/src/programs/sk_msg.rs b/ebpf/aya-ebpf/src/programs/sk_msg.rs index cee6d4d2..a8711f99 100644 --- a/ebpf/aya-ebpf/src/programs/sk_msg.rs +++ b/ebpf/aya-ebpf/src/programs/sk_msg.rs @@ -1,9 +1,9 @@ use core::ffi::c_void; use crate::{ + EbpfContext, bindings::sk_msg_md, helpers::{bpf_msg_pop_data, bpf_msg_push_data}, - EbpfContext, }; pub struct SkMsgContext { @@ -29,20 +29,12 @@ impl SkMsgContext { pub fn push_data(&self, start: u32, len: u32, flags: u64) -> Result<(), i64> { let ret = unsafe { bpf_msg_push_data(self.msg, start, len, flags) }; - if ret == 0 { - Ok(()) - } else { - Err(ret) - } + if ret == 0 { Ok(()) } else { Err(ret) } } pub fn pop_data(&self, start: u32, len: u32, flags: u64) -> Result<(), i64> { let ret = unsafe { bpf_msg_pop_data(self.msg, start, len, flags) }; - if ret == 0 { - Ok(()) - } else { - Err(ret) - } + if ret == 0 { Ok(()) } else { Err(ret) } } } diff --git a/ebpf/aya-ebpf/src/programs/sock.rs b/ebpf/aya-ebpf/src/programs/sock.rs index 64bd02fb..4b05ca36 100644 --- a/ebpf/aya-ebpf/src/programs/sock.rs +++ b/ebpf/aya-ebpf/src/programs/sock.rs @@ -1,6 +1,6 @@ use core::ffi::c_void; -use crate::{bindings::bpf_sock, EbpfContext}; +use crate::{EbpfContext, bindings::bpf_sock}; pub struct SockContext { pub sock: *mut bpf_sock, diff --git a/ebpf/aya-ebpf/src/programs/sock_addr.rs b/ebpf/aya-ebpf/src/programs/sock_addr.rs index d882c058..61d9e214 100644 --- a/ebpf/aya-ebpf/src/programs/sock_addr.rs +++ b/ebpf/aya-ebpf/src/programs/sock_addr.rs @@ -1,6 +1,6 @@ use core::ffi::c_void; -use crate::{bindings::bpf_sock_addr, EbpfContext}; +use crate::{EbpfContext, bindings::bpf_sock_addr}; pub struct SockAddrContext { pub sock_addr: *mut bpf_sock_addr, diff --git a/ebpf/aya-ebpf/src/programs/sock_ops.rs b/ebpf/aya-ebpf/src/programs/sock_ops.rs index 4eecbb5f..5ce238a8 100644 --- a/ebpf/aya-ebpf/src/programs/sock_ops.rs +++ b/ebpf/aya-ebpf/src/programs/sock_ops.rs @@ -2,7 +2,7 @@ use core::ffi::c_void; use aya_ebpf_bindings::helpers::bpf_sock_ops_cb_flags_set; -use crate::{bindings::bpf_sock_ops, EbpfContext}; +use crate::{EbpfContext, bindings::bpf_sock_ops}; pub struct SockOpsContext { pub ops: *mut bpf_sock_ops, @@ -27,11 +27,7 @@ impl SockOpsContext { pub fn set_cb_flags(&self, flags: i32) -> Result<(), i64> { let ret = unsafe { bpf_sock_ops_cb_flags_set(self.ops, flags) }; - if ret == 0 { - Ok(()) - } else { - Err(ret) - } + if ret == 0 { Ok(()) } else { Err(ret) } } pub fn remote_ip4(&self) -> u32 { diff --git a/ebpf/aya-ebpf/src/programs/sockopt.rs b/ebpf/aya-ebpf/src/programs/sockopt.rs index 21e162d9..67adbed0 100644 --- a/ebpf/aya-ebpf/src/programs/sockopt.rs +++ b/ebpf/aya-ebpf/src/programs/sockopt.rs @@ -1,6 +1,6 @@ use core::ffi::c_void; -use crate::{bindings::bpf_sockopt, EbpfContext}; +use crate::{EbpfContext, bindings::bpf_sockopt}; pub struct SockoptContext { pub sockopt: *mut bpf_sockopt, diff --git a/ebpf/aya-ebpf/src/programs/sysctl.rs b/ebpf/aya-ebpf/src/programs/sysctl.rs index fb1a76c1..cb00e1b4 100644 --- a/ebpf/aya-ebpf/src/programs/sysctl.rs +++ b/ebpf/aya-ebpf/src/programs/sysctl.rs @@ -1,6 +1,6 @@ use core::ffi::c_void; -use crate::{bindings::bpf_sysctl, EbpfContext}; +use crate::{EbpfContext, bindings::bpf_sysctl}; pub struct SysctlContext { pub sysctl: *mut bpf_sysctl, diff --git a/ebpf/aya-ebpf/src/programs/tc.rs b/ebpf/aya-ebpf/src/programs/tc.rs index 61f73d66..b963016f 100644 --- a/ebpf/aya-ebpf/src/programs/tc.rs +++ b/ebpf/aya-ebpf/src/programs/tc.rs @@ -1,6 +1,6 @@ use aya_ebpf_cty::{c_long, c_void}; -use crate::{bindings::__sk_buff, programs::sk_buff::SkBuff, EbpfContext}; +use crate::{EbpfContext, bindings::__sk_buff, programs::sk_buff::SkBuff}; pub struct TcContext { pub skb: SkBuff, @@ -85,7 +85,7 @@ impl TcContext { /// } /// /// #[map] - /// pub static mut BUF: PerCpuArray = PerCpuArray::with_max_entries(1, 0); + /// pub static BUF: PerCpuArray = PerCpuArray::with_max_entries(1, 0); /// /// fn try_classifier(ctx: TcContext) -> Result { /// let buf = unsafe { diff --git a/ebpf/aya-ebpf/src/programs/tp_btf.rs b/ebpf/aya-ebpf/src/programs/tp_btf.rs index 1a53e521..2f96d3d8 100644 --- a/ebpf/aya-ebpf/src/programs/tp_btf.rs +++ b/ebpf/aya-ebpf/src/programs/tp_btf.rs @@ -1,6 +1,6 @@ use core::ffi::c_void; -use crate::{args::FromBtfArgument, EbpfContext}; +use crate::{EbpfContext, args::FromBtfArgument}; pub struct BtfTracePointContext { ctx: *mut c_void, @@ -43,7 +43,7 @@ impl BtfTracePointContext { /// /// [1]: https://elixir.bootlin.com/linux/latest/source/include/linux/lsm_hook_defs.h pub unsafe fn arg(&self, n: usize) -> T { - T::from_argument(self.ctx as *const _, n) + unsafe { T::from_argument(self.ctx.cast(), n) } } } diff --git a/ebpf/aya-ebpf/src/programs/tracepoint.rs b/ebpf/aya-ebpf/src/programs/tracepoint.rs index bdc884aa..2d663749 100644 --- a/ebpf/aya-ebpf/src/programs/tracepoint.rs +++ b/ebpf/aya-ebpf/src/programs/tracepoint.rs @@ -1,6 +1,6 @@ use core::ffi::c_void; -use crate::{helpers::bpf_probe_read, EbpfContext}; +use crate::{EbpfContext, helpers::bpf_probe_read}; pub struct TracePointContext { ctx: *mut c_void, @@ -13,7 +13,7 @@ impl TracePointContext { #[expect(clippy::missing_safety_doc)] pub unsafe fn read_at(&self, offset: usize) -> Result { - bpf_probe_read(self.ctx.add(offset) as *const T) + unsafe { bpf_probe_read(self.ctx.add(offset).cast()) } } } diff --git a/ebpf/aya-ebpf/src/programs/xdp.rs b/ebpf/aya-ebpf/src/programs/xdp.rs index 35d22a0c..9bc19767 100644 --- a/ebpf/aya-ebpf/src/programs/xdp.rs +++ b/ebpf/aya-ebpf/src/programs/xdp.rs @@ -1,6 +1,6 @@ use core::ffi::c_void; -use crate::{bindings::xdp_md, EbpfContext}; +use crate::{EbpfContext, bindings::xdp_md}; pub struct XdpContext { pub ctx: *mut xdp_md, diff --git a/ebpf/aya-log-ebpf/Cargo.toml b/ebpf/aya-log-ebpf/Cargo.toml index 5b23afbb..83b8e753 100644 --- a/ebpf/aya-log-ebpf/Cargo.toml +++ b/ebpf/aya-log-ebpf/Cargo.toml @@ -6,6 +6,7 @@ authors.workspace = true license.workspace = true repository.workspace = true homepage.workspace = true +rust-version.workspace = true edition.workspace = true [dependencies] diff --git a/ebpf/aya-log-ebpf/src/lib.rs b/ebpf/aya-log-ebpf/src/lib.rs index d546a406..e4aa251a 100644 --- a/ebpf/aya-log-ebpf/src/lib.rs +++ b/ebpf/aya-log-ebpf/src/lib.rs @@ -4,7 +4,7 @@ #[cfg(target_arch = "bpf")] use aya_ebpf::macros::map; use aya_ebpf::maps::{PerCpuArray, PerfEventByteArray}; -pub use aya_log_common::{write_record_header, Level, WriteToBuf, LOG_BUF_CAPACITY}; +pub use aya_log_common::{LOG_BUF_CAPACITY, Level, WriteToBuf, write_record_header}; pub use aya_log_ebpf_macros::{debug, error, info, log, trace, warn}; #[doc(hidden)] @@ -19,7 +19,7 @@ pub struct LogBuf { // because the integration-test crate depends on this crate transitively. See comment in // test/integration-test/Cargo.toml. #[cfg_attr(target_arch = "bpf", map)] -pub static mut AYA_LOG_BUF: PerCpuArray = PerCpuArray::with_max_entries(1, 0); +pub static AYA_LOG_BUF: PerCpuArray = PerCpuArray::with_max_entries(1, 0); #[doc(hidden)] // This cfg_attr prevents compilation failures on macOS where the generated section name doesn't @@ -27,13 +27,13 @@ pub static mut AYA_LOG_BUF: PerCpuArray = PerCpuArray::with_max_entries( // because the integration-test crate depends on this crate transitively. See comment in // test/integration-test/Cargo.toml. #[cfg_attr(target_arch = "bpf", map)] -pub static mut AYA_LOGS: PerfEventByteArray = PerfEventByteArray::new(0); +pub static AYA_LOGS: PerfEventByteArray = PerfEventByteArray::new(0); #[doc(hidden)] pub mod macro_support { pub use aya_log_common::{ - DefaultFormatter, DisplayHint, IpFormatter, Level, LowerHexFormatter, LowerMacFormatter, - UpperHexFormatter, UpperMacFormatter, LOG_BUF_CAPACITY, + DefaultFormatter, DisplayHint, IpFormatter, LOG_BUF_CAPACITY, Level, LowerHexFormatter, + LowerMacFormatter, UpperHexFormatter, UpperMacFormatter, }; pub use aya_log_ebpf_macros::log; } diff --git a/init/Cargo.toml b/init/Cargo.toml index eda21d06..10576f96 100644 --- a/init/Cargo.toml +++ b/init/Cargo.toml @@ -6,6 +6,7 @@ authors.workspace = true license.workspace = true repository.workspace = true homepage.workspace = true +rust-version.workspace = true edition.workspace = true [dependencies] diff --git a/test/integration-common/Cargo.toml b/test/integration-common/Cargo.toml index 07de4936..94a63068 100644 --- a/test/integration-common/Cargo.toml +++ b/test/integration-common/Cargo.toml @@ -6,6 +6,7 @@ authors.workspace = true license.workspace = true repository.workspace = true homepage.workspace = true +rust-version.workspace = true edition.workspace = true [dependencies] diff --git a/test/integration-ebpf/Cargo.toml b/test/integration-ebpf/Cargo.toml index 24780717..b1a75564 100644 --- a/test/integration-ebpf/Cargo.toml +++ b/test/integration-ebpf/Cargo.toml @@ -6,6 +6,7 @@ authors.workspace = true license.workspace = true repository.workspace = true homepage.workspace = true +rust-version.workspace = true edition.workspace = true [dependencies] diff --git a/test/integration-ebpf/src/bpf_probe_read.rs b/test/integration-ebpf/src/bpf_probe_read.rs index 5c01e5ae..a721163c 100644 --- a/test/integration-ebpf/src/bpf_probe_read.rs +++ b/test/integration-ebpf/src/bpf_probe_read.rs @@ -7,7 +7,7 @@ use aya_ebpf::{ maps::Array, programs::ProbeContext, }; -use integration_common::bpf_probe_read::{TestResult, RESULT_BUF_LEN}; +use integration_common::bpf_probe_read::{RESULT_BUF_LEN, TestResult}; fn read_str_bytes( fun: unsafe fn(*const u8, &mut [u8]) -> Result<&[u8], i64>, diff --git a/test/integration-ebpf/src/memmove_test.rs b/test/integration-ebpf/src/memmove_test.rs index c4461f77..f9002131 100644 --- a/test/integration-ebpf/src/memmove_test.rs +++ b/test/integration-ebpf/src/memmove_test.rs @@ -4,7 +4,7 @@ use core::mem; use aya_ebpf::{ - bindings::{xdp_action, BPF_F_NO_PREALLOC}, + bindings::{BPF_F_NO_PREALLOC, xdp_action}, macros::{map, xdp}, maps::HashMap, programs::XdpContext, diff --git a/test/integration-ebpf/src/uprobe_cookie.rs b/test/integration-ebpf/src/uprobe_cookie.rs index c937aee9..4dc91157 100644 --- a/test/integration-ebpf/src/uprobe_cookie.rs +++ b/test/integration-ebpf/src/uprobe_cookie.rs @@ -2,11 +2,10 @@ #![no_main] use aya_ebpf::{ - helpers, + EbpfContext, helpers, macros::{map, uprobe}, maps::RingBuf, programs::ProbeContext, - EbpfContext, }; #[map] diff --git a/test/integration-test/Cargo.toml b/test/integration-test/Cargo.toml index 430268c6..61b7a193 100644 --- a/test/integration-test/Cargo.toml +++ b/test/integration-test/Cargo.toml @@ -6,6 +6,7 @@ authors.workspace = true license.workspace = true repository.workspace = true homepage.workspace = true +rust-version.workspace = true edition.workspace = true [dependencies] diff --git a/test/integration-test/build.rs b/test/integration-test/build.rs index 76164357..2caea5a4 100644 --- a/test/integration-test/build.rs +++ b/test/integration-test/build.rs @@ -6,9 +6,9 @@ use std::{ process::{Child, Command, Output, Stdio}, }; -use anyhow::{anyhow, Context as _, Ok, Result}; +use anyhow::{Context as _, Ok, Result, anyhow}; use aya_build::cargo_metadata::{Metadata, MetadataCommand, Package, Target, TargetKind}; -use xtask::{exec, AYA_BUILD_INTEGRATION_BPF, LIBBPF_DIR}; +use xtask::{AYA_BUILD_INTEGRATION_BPF, LIBBPF_DIR, exec}; /// This file, along with the xtask crate, allows analysis tools such as `cargo check`, `cargo /// clippy`, and even `cargo build` to work as users expect. Prior to this file's existence, this diff --git a/test/integration-test/src/tests/bpf_probe_read.rs b/test/integration-test/src/tests/bpf_probe_read.rs index a20f11dc..7f2c5d39 100644 --- a/test/integration-test/src/tests/bpf_probe_read.rs +++ b/test/integration-test/src/tests/bpf_probe_read.rs @@ -1,5 +1,5 @@ -use aya::{maps::Array, programs::UProbe, Ebpf}; -use integration_common::bpf_probe_read::{TestResult, RESULT_BUF_LEN}; +use aya::{Ebpf, maps::Array, programs::UProbe}; +use integration_common::bpf_probe_read::{RESULT_BUF_LEN, TestResult}; use test_log::test; #[test] @@ -106,13 +106,13 @@ fn load_and_attach_uprobe(prog_name: &str, func_name: &str, bytes: &[u8]) -> Ebp bpf } -#[no_mangle] +#[unsafe(no_mangle)] #[inline(never)] pub extern "C" fn trigger_bpf_probe_read_user(string: *const u8, len: usize) { core::hint::black_box((string, len)); } -#[no_mangle] +#[unsafe(no_mangle)] #[inline(never)] pub extern "C" fn trigger_bpf_probe_read_kernel(len: usize) { core::hint::black_box(len); diff --git a/test/integration-test/src/tests/btf_relocations.rs b/test/integration-test/src/tests/btf_relocations.rs index b6074ef9..4d3b6845 100644 --- a/test/integration-test/src/tests/btf_relocations.rs +++ b/test/integration-test/src/tests/btf_relocations.rs @@ -1,4 +1,4 @@ -use aya::{maps::Array, programs::UProbe, util::KernelVersion, Btf, EbpfLoader, Endianness}; +use aya::{Btf, EbpfLoader, Endianness, maps::Array, programs::UProbe, util::KernelVersion}; use test_case::test_case; #[test_case("enum_signed_32", false, Some((KernelVersion::new(6, 0, 0), "https://github.com/torvalds/linux/commit/6089fb3")), -0x7AAAAAAAi32 as u64)] @@ -32,7 +32,9 @@ fn relocation_tests( if let Some((required_kernel_version, commit)) = required_kernel_version { let current_kernel_version = KernelVersion::current().unwrap(); if current_kernel_version < required_kernel_version { - eprintln!("skipping test on kernel {current_kernel_version:?}, support for {program} was added in {required_kernel_version:?}; see {commit}"); + eprintln!( + "skipping test on kernel {current_kernel_version:?}, support for {program} was added in {required_kernel_version:?}; see {commit}" + ); return; } } @@ -62,7 +64,7 @@ fn relocation_tests( assert_eq!(output_map.get(&key, 0).unwrap(), expected) } -#[no_mangle] +#[unsafe(no_mangle)] #[inline(never)] pub extern "C" fn trigger_btf_relocations_program() { core::hint::black_box(trigger_btf_relocations_program); diff --git a/test/integration-test/src/tests/info.rs b/test/integration-test/src/tests/info.rs index 1bc0670f..05b7a849 100644 --- a/test/integration-test/src/tests/info.rs +++ b/test/integration-test/src/tests/info.rs @@ -8,11 +8,11 @@ use std::{fs, panic, path::Path, time::SystemTime}; use aya::{ - maps::{loaded_maps, Array, HashMap, IterableMap as _, MapError, MapType}, - programs::{loaded_programs, ProgramError, ProgramType, SocketFilter, TracePoint}, + Ebpf, + maps::{Array, HashMap, IterableMap as _, MapError, MapType, loaded_maps}, + programs::{ProgramError, ProgramType, SocketFilter, TracePoint, loaded_programs}, sys::enable_stats, util::KernelVersion, - Ebpf, }; use libc::EINVAL; @@ -151,7 +151,9 @@ fn test_loaded_at() { let loaded_at = match prog.info().unwrap().loaded_at() { Some(time) => time, None => { - eprintln!("ignoring test completely as `load_time` field of `bpf_prog_info` is not available on the host"); + eprintln!( + "ignoring test completely as `load_time` field of `bpf_prog_info` is not available on the host" + ); return; } }; diff --git a/test/integration-test/src/tests/iter.rs b/test/integration-test/src/tests/iter.rs index 3325ad2e..960732ab 100644 --- a/test/integration-test/src/tests/iter.rs +++ b/test/integration-test/src/tests/iter.rs @@ -1,6 +1,6 @@ use std::io::BufRead; -use aya::{programs::Iter, Btf, Ebpf}; +use aya::{Btf, Ebpf, programs::Iter}; use test_log::test; #[test] diff --git a/test/integration-test/src/tests/load.rs b/test/integration-test/src/tests/load.rs index 0b4f176e..8ec71419 100644 --- a/test/integration-test/src/tests/load.rs +++ b/test/integration-test/src/tests/load.rs @@ -1,13 +1,14 @@ use std::{convert::TryInto as _, fs::remove_file, path::Path, thread, time::Duration}; use aya::{ + Ebpf, maps::Array, programs::{ + KProbe, TracePoint, UProbe, Xdp, XdpFlags, links::{FdLink, PinnedLink}, - loaded_links, loaded_programs, KProbe, TracePoint, UProbe, Xdp, XdpFlags, + loaded_links, loaded_programs, }, util::KernelVersion, - Ebpf, }; use aya_obj::programs::XdpAttachType; use test_log::test; @@ -121,7 +122,7 @@ fn pin_lifecycle_multiple_btf_maps() { remove_file(map_pin_by_name_path).unwrap(); } -#[no_mangle] +#[unsafe(no_mangle)] #[inline(never)] pub extern "C" fn trigger_bpf_program() { core::hint::black_box(trigger_bpf_program); @@ -345,7 +346,9 @@ fn pin_link() { fn pin_lifecycle() { let kernel_version = KernelVersion::current().unwrap(); if kernel_version < KernelVersion::new(5, 18, 0) { - eprintln!("skipping test on kernel {kernel_version:?}, support for BPF_F_XDP_HAS_FRAGS was added in 5.18.0; see https://github.com/torvalds/linux/commit/c2f2cdb"); + eprintln!( + "skipping test on kernel {kernel_version:?}, support for BPF_F_XDP_HAS_FRAGS was added in 5.18.0; see https://github.com/torvalds/linux/commit/c2f2cdb" + ); return; } @@ -514,7 +517,7 @@ fn pin_lifecycle_kprobe() { assert_unloaded("test_kprobe"); } -#[no_mangle] +#[unsafe(no_mangle)] #[inline(never)] extern "C" fn uprobe_function() { core::hint::black_box(uprobe_function); diff --git a/test/integration-test/src/tests/log.rs b/test/integration-test/src/tests/log.rs index 3ef1891e..01820b63 100644 --- a/test/integration-test/src/tests/log.rs +++ b/test/integration-test/src/tests/log.rs @@ -3,12 +3,12 @@ use std::{ sync::{Arc, Mutex}, }; -use aya::{programs::UProbe, Ebpf}; +use aya::{Ebpf, programs::UProbe}; use aya_log::EbpfLogger; use log::{Level, Log, Record}; use test_log::test; -#[no_mangle] +#[unsafe(no_mangle)] #[inline(never)] pub extern "C" fn trigger_ebpf_program() { core::hint::black_box(trigger_ebpf_program); diff --git a/test/integration-test/src/tests/raw_tracepoint.rs b/test/integration-test/src/tests/raw_tracepoint.rs index 1a880a0c..ab64abb9 100644 --- a/test/integration-test/src/tests/raw_tracepoint.rs +++ b/test/integration-test/src/tests/raw_tracepoint.rs @@ -1,4 +1,4 @@ -use aya::{maps::Array, programs::RawTracePoint, Ebpf}; +use aya::{Ebpf, maps::Array, programs::RawTracePoint}; use integration_common::raw_tracepoint::SysEnterEvent; fn get_event(bpf: &mut Ebpf) -> SysEnterEvent { diff --git a/test/integration-test/src/tests/rbpf.rs b/test/integration-test/src/tests/rbpf.rs index 66c2234f..ce62cb5c 100644 --- a/test/integration-test/src/tests/rbpf.rs +++ b/test/integration-test/src/tests/rbpf.rs @@ -2,7 +2,7 @@ use core::{mem::size_of, ptr::null_mut, slice::from_raw_parts}; use std::collections::HashMap; use assert_matches::assert_matches; -use aya_obj::{generated::bpf_insn, programs::XdpAttachType, Object, ProgramSection}; +use aya_obj::{Object, ProgramSection, generated::bpf_insn, programs::XdpAttachType}; use test_log::test; #[test] diff --git a/test/integration-test/src/tests/relocations.rs b/test/integration-test/src/tests/relocations.rs index 2328ae72..592cbd50 100644 --- a/test/integration-test/src/tests/relocations.rs +++ b/test/integration-test/src/tests/relocations.rs @@ -1,7 +1,7 @@ use aya::{ + Ebpf, programs::{UProbe, Xdp}, util::KernelVersion, - Ebpf, }; use test_log::test; @@ -21,7 +21,9 @@ fn relocations() { fn text_64_64_reloc() { let kernel_version = KernelVersion::current().unwrap(); if kernel_version < KernelVersion::new(5, 13, 0) { - eprintln!("skipping test on kernel {kernel_version:?}, support for bpf_for_each_map_elem was added in 5.13.0; see https://github.com/torvalds/linux/commit/69c087b"); + eprintln!( + "skipping test on kernel {kernel_version:?}, support for bpf_for_each_map_elem was added in 5.13.0; see https://github.com/torvalds/linux/commit/69c087b" + ); return; } @@ -60,7 +62,7 @@ fn load_and_attach(name: &str, bytes: &[u8]) -> Ebpf { bpf } -#[no_mangle] +#[unsafe(no_mangle)] #[inline(never)] pub extern "C" fn trigger_relocations_program() { core::hint::black_box(trigger_relocations_program); diff --git a/test/integration-test/src/tests/ring_buf.rs b/test/integration-test/src/tests/ring_buf.rs index 52affeba..c7bf633f 100644 --- a/test/integration-test/src/tests/ring_buf.rs +++ b/test/integration-test/src/tests/ring_buf.rs @@ -2,8 +2,8 @@ use std::{ mem, os::fd::AsRawFd as _, sync::{ - atomic::{AtomicBool, Ordering}, Arc, + atomic::{AtomicBool, Ordering}, }, thread, }; @@ -11,9 +11,9 @@ use std::{ use anyhow::Context as _; use assert_matches::assert_matches; use aya::{ - maps::{array::PerCpuArray, ring_buf::RingBuf, MapData}, - programs::UProbe, Ebpf, EbpfLoader, + maps::{MapData, array::PerCpuArray, ring_buf::RingBuf}, + programs::UProbe, }; use aya_obj::generated::BPF_RINGBUF_HDR_SZ; use integration_common::ring_buf::Registers; @@ -21,7 +21,7 @@ use rand::Rng as _; use test_log::test; use tokio::{ io::unix::AsyncFd, - time::{sleep, Duration}, + time::{Duration, sleep}, }; struct RingBufTest { @@ -141,7 +141,7 @@ fn ring_buf(n: usize) { assert_eq!(rejected, expected_rejected); } -#[no_mangle] +#[unsafe(no_mangle)] #[inline(never)] pub extern "C" fn ring_buf_trigger_ebpf_program(arg: u64) { std::hint::black_box(arg); @@ -179,8 +179,8 @@ async fn ring_buf_async_with_drops() { } }; use futures::future::{ - select, Either::{Left, Right}, + select, }; let writer = futures::future::try_join_all(data.chunks(8).map(ToOwned::to_owned).map(|v| { tokio::spawn(async { diff --git a/test/integration-test/src/tests/smoke.rs b/test/integration-test/src/tests/smoke.rs index 0d57aea9..fc53ef2c 100644 --- a/test/integration-test/src/tests/smoke.rs +++ b/test/integration-test/src/tests/smoke.rs @@ -1,7 +1,7 @@ use aya::{ + Ebpf, EbpfLoader, programs::{Extension, TracePoint, Xdp, XdpFlags}, util::KernelVersion, - Ebpf, EbpfLoader, }; use test_log::test; @@ -11,7 +11,9 @@ use crate::utils::NetNsGuard; fn xdp() { let kernel_version = KernelVersion::current().unwrap(); if kernel_version < KernelVersion::new(5, 18, 0) { - eprintln!("skipping test on kernel {kernel_version:?}, support for BPF_F_XDP_HAS_FRAGS was added in 5.18.0; see https://github.com/torvalds/linux/commit/c2f2cdb"); + eprintln!( + "skipping test on kernel {kernel_version:?}, support for BPF_F_XDP_HAS_FRAGS was added in 5.18.0; see https://github.com/torvalds/linux/commit/c2f2cdb" + ); return; } diff --git a/test/integration-test/src/tests/strncmp.rs b/test/integration-test/src/tests/strncmp.rs index 56cf5ef3..fe25b48b 100644 --- a/test/integration-test/src/tests/strncmp.rs +++ b/test/integration-test/src/tests/strncmp.rs @@ -1,12 +1,12 @@ use std::{ cmp::Ordering, - ffi::{c_char, CStr}, + ffi::{CStr, c_char}, }; use aya::{ + Ebpf, maps::{Array, MapData}, programs::UProbe, - Ebpf, }; use integration_common::strncmp::TestResult; @@ -43,7 +43,7 @@ fn do_bpf_strncmp(array: &Array<&MapData, TestResult>, s1: &CStr) -> Ordering { ord } -#[no_mangle] +#[unsafe(no_mangle)] #[inline(never)] pub extern "C" fn trigger_bpf_strncmp(s1: *const c_char) { core::hint::black_box(s1); diff --git a/test/integration-test/src/tests/tcx.rs b/test/integration-test/src/tests/tcx.rs index a58565d0..215620c3 100644 --- a/test/integration-test/src/tests/tcx.rs +++ b/test/integration-test/src/tests/tcx.rs @@ -1,7 +1,7 @@ use aya::{ - programs::{tc::TcAttachOptions, LinkOrder, ProgramId, SchedClassifier, TcAttachType}, - util::KernelVersion, Ebpf, + programs::{LinkOrder, ProgramId, SchedClassifier, TcAttachType, tc::TcAttachOptions}, + util::KernelVersion, }; use test_log::test; diff --git a/test/integration-test/src/tests/uprobe_cookie.rs b/test/integration-test/src/tests/uprobe_cookie.rs index 7f9f70e3..dd69762b 100644 --- a/test/integration-test/src/tests/uprobe_cookie.rs +++ b/test/integration-test/src/tests/uprobe_cookie.rs @@ -1,4 +1,4 @@ -use aya::{maps::ring_buf::RingBuf, programs::UProbe, EbpfLoader}; +use aya::{EbpfLoader, maps::ring_buf::RingBuf, programs::UProbe}; use test_log::test; #[test] @@ -50,13 +50,13 @@ fn test_uprobe_cookie() { assert_eq!(seen, EXP); } -#[no_mangle] +#[unsafe(no_mangle)] #[inline(never)] pub extern "C" fn uprobe_cookie_trigger_ebpf_program_a(arg: u64) { std::hint::black_box(arg); } -#[no_mangle] +#[unsafe(no_mangle)] #[inline(never)] pub extern "C" fn uprobe_cookie_trigger_ebpf_program_b(arg: u32) { std::hint::black_box(arg); diff --git a/test/integration-test/src/tests/xdp.rs b/test/integration-test/src/tests/xdp.rs index af57fa14..6e0687a2 100644 --- a/test/integration-test/src/tests/xdp.rs +++ b/test/integration-test/src/tests/xdp.rs @@ -1,9 +1,9 @@ use std::{net::UdpSocket, num::NonZeroU32, time::Duration}; use aya::{ + Ebpf, maps::{Array, CpuMap, XskMap}, programs::{Xdp, XdpFlags}, - Ebpf, }; use object::{Object, ObjectSection, ObjectSymbol, SymbolSection}; use test_log::test; diff --git a/test/integration-test/src/utils.rs b/test/integration-test/src/utils.rs index 27c41ad8..ac20f62b 100644 --- a/test/integration-test/src/utils.rs +++ b/test/integration-test/src/utils.rs @@ -8,7 +8,7 @@ use std::{ use aya::netlink_set_link_up; use libc::if_nametoindex; -use netns_rs::{get_from_current_thread, NetNs}; +use netns_rs::{NetNs, get_from_current_thread}; pub struct NetNsGuard { name: String, diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml index db4a2854..ac64c5a8 100644 --- a/xtask/Cargo.toml +++ b/xtask/Cargo.toml @@ -6,6 +6,7 @@ authors.workspace = true license.workspace = true repository.workspace = true homepage.workspace = true +rust-version.workspace = true edition.workspace = true [dependencies] diff --git a/xtask/public-api/aya-ebpf.txt b/xtask/public-api/aya-ebpf.txt index dd37b049..ddb957e2 100644 --- a/xtask/public-api/aya-ebpf.txt +++ b/xtask/public-api/aya-ebpf.txt @@ -3,7 +3,7 @@ pub use aya_ebpf::bindings pub use aya_ebpf::cty pub use aya_ebpf::macros pub mod aya_ebpf::helpers -pub use aya_ebpf::helpers::gen +pub use aya_ebpf::helpers::generated pub macro aya_ebpf::helpers::bpf_printk! #[attr="Repr([ReprTransparent])")] pub struct aya_ebpf::helpers::PrintkArg(_) impl aya_ebpf::helpers::PrintkArg @@ -2695,7 +2695,7 @@ impl core::convert::From for aya_ebpf::PtRegs pub fn aya_ebpf::PtRegs::from(t: T) -> T pub struct aya_ebpf::RawTracepointArgs impl aya_ebpf::RawTracepointArgs -pub unsafe fn aya_ebpf::RawTracepointArgs::arg(&self, n: usize) -> *const T +pub unsafe fn aya_ebpf::RawTracepointArgs::arg(&self, n: usize) -> T pub fn aya_ebpf::RawTracepointArgs::new(args: *mut aya_ebpf_bindings::x86_64::bindings::bpf_raw_tracepoint_args) -> Self impl core::marker::Freeze for aya_ebpf::RawTracepointArgs impl !core::marker::Send for aya_ebpf::RawTracepointArgs diff --git a/xtask/src/codegen/aya_ebpf_bindings.rs b/xtask/src/codegen/aya_ebpf_bindings.rs index 7a9d15d6..2b7f51d0 100644 --- a/xtask/src/codegen/aya_ebpf_bindings.rs +++ b/xtask/src/codegen/aya_ebpf_bindings.rs @@ -9,12 +9,12 @@ use anyhow::{Context as _, Result}; use aya_tool::{bindgen, write_to_file_fmt}; use proc_macro2::TokenStream; use quote::ToTokens; -use syn::{parse_str, Item}; +use syn::{Item, parse_str}; use crate::{ codegen::{ - helpers::{expand_helpers, extract_helpers}, Architecture, SysrootOptions, + helpers::{expand_helpers, extract_helpers}, }, exec, }; diff --git a/xtask/src/codegen/helpers.rs b/xtask/src/codegen/helpers.rs index 54c502b6..7e7c7c72 100644 --- a/xtask/src/codegen/helpers.rs +++ b/xtask/src/codegen/helpers.rs @@ -1,9 +1,9 @@ use proc_macro2::TokenStream; -use quote::{quote, TokenStreamExt}; +use quote::{TokenStreamExt, quote}; use syn::{ - punctuated::Punctuated, AngleBracketedGenericArguments, BareFnArg, ForeignItem, - ForeignItemStatic, GenericArgument, Ident, Item, Path, PathArguments, ReturnType, Token, Type, - TypeBareFn, TypePath, + AngleBracketedGenericArguments, BareFnArg, ForeignItem, ForeignItemStatic, GenericArgument, + Ident, Item, Path, PathArguments, ReturnType, Token, Type, TypeBareFn, TypePath, + punctuated::Punctuated, }; pub fn extract_helpers(items: &[Item]) -> (Vec, Vec>) { diff --git a/xtask/src/lib.rs b/xtask/src/lib.rs index 47c6c56c..cd7abe3a 100644 --- a/xtask/src/lib.rs +++ b/xtask/src/lib.rs @@ -1,6 +1,6 @@ use std::process::Command; -use anyhow::{bail, Context as _, Result}; +use anyhow::{Context as _, Result, bail}; pub const AYA_BUILD_INTEGRATION_BPF: &str = "AYA_BUILD_INTEGRATION_BPF"; pub const LIBBPF_DIR: &str = "xtask/libbpf"; diff --git a/xtask/src/main.rs b/xtask/src/main.rs index 9060f16e..b085cc12 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -8,7 +8,7 @@ use std::process::Command; use anyhow::{Context as _, Result}; use cargo_metadata::{Metadata, MetadataCommand}; use clap::Parser; -use xtask::{exec, LIBBPF_DIR}; +use xtask::{LIBBPF_DIR, exec}; #[derive(Parser)] pub struct XtaskOptions { diff --git a/xtask/src/public_api.rs b/xtask/src/public_api.rs index 7605f690..2225860f 100644 --- a/xtask/src/public_api.rs +++ b/xtask/src/public_api.rs @@ -1,15 +1,15 @@ use std::{ fmt::Write as _, - fs::{read_to_string, File}, + fs::{File, read_to_string}, io::Write as _, path::Path, }; -use anyhow::{bail, Context as _, Result}; +use anyhow::{Context as _, Result, bail}; use cargo_metadata::{Metadata, Package, Target}; use clap::Parser; -use dialoguer::{theme::ColorfulTheme, Confirm}; -use diff::{lines, Result as Diff}; +use dialoguer::{Confirm, theme::ColorfulTheme}; +use diff::{Result as Diff, lines}; use xtask::Errors; #[derive(Debug, Parser)] diff --git a/xtask/src/run.rs b/xtask/src/run.rs index 03870b55..a5486839 100644 --- a/xtask/src/run.rs +++ b/xtask/src/run.rs @@ -1,7 +1,7 @@ use std::{ ffi::OsString, fmt::Write as _, - fs::{copy, create_dir_all, OpenOptions}, + fs::{OpenOptions, copy, create_dir_all}, io::{BufRead as _, BufReader, Write as _}, path::PathBuf, process::{Child, ChildStdin, Command, Output, Stdio}, @@ -9,11 +9,11 @@ use std::{ thread, }; -use anyhow::{anyhow, bail, Context as _, Result}; +use anyhow::{Context as _, Result, anyhow, bail}; use base64::engine::Engine as _; use cargo_metadata::{Artifact, CompilerMessage, Message, Target}; use clap::Parser; -use xtask::{Errors, AYA_BUILD_INTEGRATION_BPF}; +use xtask::{AYA_BUILD_INTEGRATION_BPF, Errors}; #[derive(Parser)] enum Environment {