From 1f3acbcfe0fb05968190060af965f0f5ab9092e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alessandro=C2=A0Decina?= Date: Fri, 15 Oct 2021 09:22:24 +0000 Subject: [PATCH] bpf: add override for bpf_probe_read_user_str --- bpf/aya-bpf/src/helpers.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) 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];