diff --git a/bpf/aya-bpf/src/helpers.rs b/bpf/aya-bpf/src/helpers.rs index 0bb3ee43..7a03a28c 100644 --- a/bpf/aya-bpf/src/helpers.rs +++ b/bpf/aya-bpf/src/helpers.rs @@ -20,6 +20,26 @@ pub unsafe fn bpf_probe_read(src: *const T) -> Result { Ok(v.assume_init()) } +#[inline] +pub unsafe fn bpf_probe_read_user_str(src: *const u8, dest: &mut [u8]) -> Result { + let len = gen::bpf_probe_read_user_str( + dest.as_mut_ptr() as *mut c_void, + dest.len() as u32, + src as *const c_void, + ); + if len < 0 { + return Err(-1); + } + + let mut len = len as usize; + if len > dest.len() { + // this can never happen, it's needed to tell the verifier that len is + // bounded + len = dest.len(); + } + Ok(len as usize) +} + #[inline] pub fn bpf_get_current_comm() -> Result<[c_char; 16], c_long> { let mut comm: [c_char; 16usize] = [0; 16];