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 {