@ -1,4 +1,4 @@
use crate ::cty ::c_void ;
use crate ::{ cty ::c_void , helpers ::bpf_probe_read_kernel } ;
// aarch64 uses user_pt_regs instead of pt_regs
#[ cfg(not(bpf_target_arch = " aarch64 " )) ]
@ -101,18 +101,18 @@ pub trait FromPtRegs: Sized {
impl < T > FromPtRegs for * const T {
fn from_argument ( ctx : & pt_regs , n : usize ) -> Option < Self > {
match n {
0 = > Some ( ctx . rdi as * const _ ) ,
1 = > Some ( ctx . rsi as * const _ ) ,
2 = > Some ( ctx . rdx as * const _ ) ,
3 = > Some ( ctx . rcx as * const _ ) ,
4 = > Some ( ctx . r8 as * const _ ) ,
5 = > Some ( ctx . r9 as * const _ ) ,
0 = > unsafe { bpf_probe_read_kernel ( & ctx . rdi ) . map ( | v | v as * const _ ) . ok ( ) } ,
1 = > unsafe { bpf_probe_read_kernel ( & ctx . rsi ) . map ( | v | v as * const _ ) . ok ( ) } ,
2 = > unsafe { bpf_probe_read_kernel ( & ctx . rdx ) . map ( | v | v as * const _ ) . ok ( ) } ,
3 = > unsafe { bpf_probe_read_kernel ( & ctx . rcx ) . map ( | v | v as * const _ ) . ok ( ) } ,
4 = > unsafe { bpf_probe_read_kernel ( & ctx . r8 ) . map ( | v | v as * const _ ) . ok ( ) } ,
5 = > unsafe { bpf_probe_read_kernel ( & ctx . r9 ) . map ( | v | v as * const _ ) . ok ( ) } ,
_ = > None ,
}
}
fn from_retval ( ctx : & pt_regs ) -> Option < Self > {
Some ( ctx . rax as * const _ )
unsafe { bpf_probe_read_kernel ( & ctx . rax ) . map ( | v | v as * const _ ) . ok ( ) }
}
}
@ -120,14 +120,22 @@ impl<T> FromPtRegs for *const T {
impl < T > FromPtRegs for * const T {
fn from_argument ( ctx : & pt_regs , n : usize ) -> Option < Self > {
if n < = 6 {
Some ( ctx . uregs [ n ] as * const _ )
unsafe {
bpf_probe_read_kernel ( & ctx . uregs [ n ] )
. map ( | v | v as * const _ )
. ok ( )
}
} else {
None
}
}
fn from_retval ( ctx : & pt_regs ) -> Option < Self > {
Some ( ctx . uregs [ 0 ] as * const _ )
unsafe {
bpf_probe_read_kernel ( & ctx . uregs [ 0 ] )
. map ( | v | v as * const _ )
. ok ( )
}
}
}
@ -135,14 +143,22 @@ impl<T> FromPtRegs for *const T {
impl < T > FromPtRegs for * const T {
fn from_argument ( ctx : & pt_regs , n : usize ) -> Option < Self > {
if n < = 7 {
Some ( ctx . regs [ n ] as * const _ )
unsafe {
bpf_probe_read_kernel ( & ctx . regs [ n ] )
. map ( | v | v as * const _ )
. ok ( )
}
} else {
None
}
}
fn from_retval ( ctx : & pt_regs ) -> Option < Self > {
Some ( ctx . regs [ 0 ] as * const _ )
unsafe {
bpf_probe_read_kernel ( & ctx . regs [ 0 ] )
. map ( | v | v as * const _ )
. ok ( )
}
}
}
@ -150,18 +166,18 @@ impl<T> FromPtRegs for *const T {
impl < T > FromPtRegs for * mut T {
fn from_argument ( ctx : & pt_regs , n : usize ) -> Option < Self > {
match n {
0 = > Some ( ctx . rdi as * mut _ ) ,
1 = > Some ( ctx . rsi as * mut _ ) ,
2 = > Some ( ctx . rdx as * mut _ ) ,
3 = > Some ( ctx . rcx as * mut _ ) ,
4 = > Some ( ctx . r8 as * mut _ ) ,
5 = > Some ( ctx . r9 as * mut _ ) ,
0 = > unsafe { bpf_probe_read_kernel ( & ctx . rdi ) . map ( | v | v as * mut _ ) . ok ( ) } ,
1 = > unsafe { bpf_probe_read_kernel ( & ctx . rsi ) . map ( | v | v as * mut _ ) . ok ( ) } ,
2 = > unsafe { bpf_probe_read_kernel ( & ctx . rdx ) . map ( | v | v as * mut _ ) . ok ( ) } ,
3 = > unsafe { bpf_probe_read_kernel ( & ctx . rcx ) . map ( | v | v as * mut _ ) . ok ( ) } ,
4 = > unsafe { bpf_probe_read_kernel ( & ctx . r8 ) . map ( | v | v as * mut _ ) . ok ( ) } ,
5 = > unsafe { bpf_probe_read_kernel ( & ctx . r9 ) . map ( | v | v as * mut _ ) . ok ( ) } ,
_ = > None ,
}
}
fn from_retval ( ctx : & pt_regs ) -> Option < Self > {
Some ( ctx . rax as * mut _ )
unsafe { bpf_probe_read_kernel ( & ctx . rax ) . map ( | v | v as * mut _ ) . ok ( ) }
}
}
@ -169,14 +185,22 @@ impl<T> FromPtRegs for *mut T {
impl < T > FromPtRegs for * mut T {
fn from_argument ( ctx : & pt_regs , n : usize ) -> Option < Self > {
if n < = 6 {
Some ( ctx . uregs [ n ] as * mut _ )
unsafe {
bpf_probe_read_kernel ( & ctx . uregs [ n ] )
. map ( | v | v as * mut _ )
. ok ( )
}
} else {
None
}
}
fn from_retval ( ctx : & pt_regs ) -> Option < Self > {
Some ( ctx . uregs [ 0 ] as * mut _ )
unsafe {
bpf_probe_read_kernel ( & ctx . uregs [ 0 ] )
. map ( | v | v as * mut _ )
. ok ( )
}
}
}
@ -184,14 +208,22 @@ impl<T> FromPtRegs for *mut T {
impl < T > FromPtRegs for * mut T {
fn from_argument ( ctx : & pt_regs , n : usize ) -> Option < Self > {
if n < = 7 {
Some ( ctx . regs [ n ] as * mut _ )
unsafe {
bpf_probe_read_kernel ( & ctx . regs [ n ] )
. map ( | v | v as * mut _ )
. ok ( )
}
} else {
None
}
}
fn from_retval ( ctx : & pt_regs ) -> Option < Self > {
Some ( ctx . regs [ 0 ] as * mut _ )
unsafe {
bpf_probe_read_kernel ( & ctx . regs [ 0 ] )
. map ( | v | v as * mut _ )
. ok ( )
}
}
}