From 9eefb48a0ad90831c09c7bd941d035b34e1f1771 Mon Sep 17 00:00:00 2001 From: Tamir Duberstein Date: Mon, 3 Mar 2025 17:32:37 -0500 Subject: [PATCH] aya: remove some copies Replace truncation with proper NULL termination at the site of use. --- aya/src/programs/mod.rs | 12 +++++------- aya/src/sys/bpf.rs | 4 ++-- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/aya/src/programs/mod.rs b/aya/src/programs/mod.rs index 39fe1b8e..89ce8d26 100644 --- a/aya/src/programs/mod.rs +++ b/aya/src/programs/mod.rs @@ -662,13 +662,11 @@ fn load_program( let target_kernel_version = kernel_version.unwrap_or_else(|| KernelVersion::current().unwrap().code()); - let prog_name = if let Some(name) = name { - let mut name = name.clone(); - if name.len() > 15 { - name.truncate(15); - } - let prog_name = CString::new(name.clone()).map_err(|std::ffi::NulError { .. }| { - ProgramError::InvalidName { name: name.clone() } + let prog_name = if let Some(name) = name.as_deref() { + let prog_name = CString::new(name).map_err(|err @ std::ffi::NulError { .. }| { + let name = err.into_vec(); + let name = unsafe { String::from_utf8_unchecked(name) }; + ProgramError::InvalidName { name } })?; Some(prog_name) } else { diff --git a/aya/src/sys/bpf.rs b/aya/src/sys/bpf.rs index 2bc8c4c6..fb938286 100644 --- a/aya/src/sys/bpf.rs +++ b/aya/src/sys/bpf.rs @@ -151,7 +151,7 @@ pub(crate) fn bpf_load_program( if let Some(name) = &aya_attr.name { let name_bytes = name.to_bytes(); - let len = cmp::min(name_bytes.len(), u.prog_name.len()); + let len = cmp::min(name_bytes.len(), u.prog_name.len() - 1); // Ensure NULL termination. u.prog_name[..len] .copy_from_slice(unsafe { mem::transmute::<&[u8], &[c_char]>(&name_bytes[..len]) }); } @@ -712,7 +712,7 @@ pub(crate) fn is_prog_name_supported() -> bool { let u = unsafe { &mut attr.__bindgen_anon_3 }; let name = c"aya_name_check"; let name_bytes = name.to_bytes(); - let len = cmp::min(name_bytes.len(), u.prog_name.len()); + let len = cmp::min(name_bytes.len(), u.prog_name.len() - 1); // Ensure NULL termination. u.prog_name[..len] .copy_from_slice(unsafe { mem::transmute::<&[u8], &[c_char]>(&name_bytes[..len]) }); bpf_prog_load(attr).is_ok()