From bfa365732e953aae98eb34b62b8f35a8e130eda5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Medina?= Date: Tue, 6 Jun 2023 02:05:08 -0700 Subject: [PATCH] handle a couple more TODOs --- aya/src/maps/mod.rs | 7 +++---- aya/src/maps/perf/perf_buffer.rs | 15 ++++++--------- aya/src/programs/perf_attach.rs | 11 ++++------- aya/src/sys/mod.rs | 9 ++++----- aya/src/sys/perf_event.rs | 4 ++-- 5 files changed, 19 insertions(+), 27 deletions(-) diff --git a/aya/src/maps/mod.rs b/aya/src/maps/mod.rs index c74e03a8..bdd27254 100644 --- a/aya/src/maps/mod.rs +++ b/aya/src/maps/mod.rs @@ -24,10 +24,9 @@ //! //! let intercept_egress = SockMap::try_from(bpf.map_mut("INTERCEPT_EGRESS").unwrap())?; //! let map_fd = intercept_egress.fd()?; -//! // TODO (AM) figure out lifetimes -//! // let prog: &mut SkMsg = bpf.program_mut("intercept_egress_packet").unwrap().try_into()?; -//! // prog.load()?; -//! // prog.attach(map_fd)?; +//! let prog: &mut SkMsg = bpf.program_mut("intercept_egress_packet").unwrap().try_into()?; +//! prog.load()?; +//! prog.attach(map_fd)?; //! //! # Ok::<(), aya::BpfError>(()) //! ``` diff --git a/aya/src/maps/perf/perf_buffer.rs b/aya/src/maps/perf/perf_buffer.rs index 283083d1..ec81c4ea 100644 --- a/aya/src/maps/perf/perf_buffer.rs +++ b/aya/src/maps/perf/perf_buffer.rs @@ -2,7 +2,7 @@ use std::{ ffi::c_void, io, mem, os::{ - fd::OwnedFd, + fd::{AsFd, BorrowedFd, OwnedFd}, unix::io::{AsRawFd, RawFd}, }, ptr, slice, @@ -112,8 +112,7 @@ impl PerfBuffer { size + page_size, PROT_READ | PROT_WRITE, MAP_SHARED, - // TODO (AM) - fd.as_raw_fd(), + fd.as_fd(), 0, ) }; @@ -130,8 +129,7 @@ impl PerfBuffer { page_size, }; - // TODO (AM) - perf_event_ioctl(perf_buf.fd.as_raw_fd(), PERF_EVENT_IOC_ENABLE, 0) + perf_event_ioctl(perf_buf.fd.as_fd(), PERF_EVENT_IOC_ENABLE, 0) .map_err(|(_, io_error)| PerfBufferError::PerfEventEnableError { io_error })?; Ok(perf_buf) @@ -271,8 +269,7 @@ impl AsRawFd for PerfBuffer { impl Drop for PerfBuffer { fn drop(&mut self) { unsafe { - // TODO (AM) - let _ = perf_event_ioctl(self.fd.as_raw_fd(), PERF_EVENT_IOC_DISABLE, 0); + let _ = perf_event_ioctl(self.fd.as_fd(), PERF_EVENT_IOC_DISABLE, 0); munmap( self.buf.load(Ordering::SeqCst) as *mut c_void, self.size + self.page_size, @@ -287,11 +284,11 @@ unsafe fn mmap( len: usize, prot: c_int, flags: c_int, - fd: i32, + fd: BorrowedFd<'_>, offset: libc::off_t, ) -> *mut c_void { #[cfg(not(test))] - return libc::mmap(addr, len, prot, flags, fd, offset); + return libc::mmap(addr, len, prot, flags, fd.as_raw_fd(), offset); #[cfg(test)] use crate::sys::TEST_MMAP_RET; diff --git a/aya/src/programs/perf_attach.rs b/aya/src/programs/perf_attach.rs index e62d8d6a..0cabd257 100644 --- a/aya/src/programs/perf_attach.rs +++ b/aya/src/programs/perf_attach.rs @@ -1,6 +1,6 @@ //! Perf attach links. use std::os::{ - fd::{AsRawFd, BorrowedFd, OwnedFd}, + fd::{AsFd, AsRawFd, BorrowedFd, OwnedFd}, unix::io::RawFd, }; @@ -62,8 +62,7 @@ impl Link for PerfLink { } fn detach(mut self) -> Result<(), ProgramError> { - // TODO (AM) - let _ = perf_event_ioctl(self.perf_fd.as_raw_fd(), PERF_EVENT_IOC_DISABLE, 0); + let _ = perf_event_ioctl(self.perf_fd.as_fd(), PERF_EVENT_IOC_DISABLE, 0); if let Some(probe_kind) = self.probe_kind.take() { if let Some(event_alias) = self.event_alias.take() { @@ -107,15 +106,13 @@ fn perf_attach_either( probe_kind: Option, event_alias: Option, ) -> Result { - // TODO (AM) - perf_event_ioctl(fd.as_raw_fd(), PERF_EVENT_IOC_SET_BPF, prog_fd.as_raw_fd()).map_err( + perf_event_ioctl(fd.as_fd(), PERF_EVENT_IOC_SET_BPF, prog_fd.as_raw_fd()).map_err( |(_, io_error)| ProgramError::SyscallError { call: "PERF_EVENT_IOC_SET_BPF".to_owned(), io_error, }, )?; - // TODO (AM) - perf_event_ioctl(fd.as_raw_fd(), PERF_EVENT_IOC_ENABLE, 0).map_err(|(_, io_error)| { + perf_event_ioctl(fd.as_fd(), PERF_EVENT_IOC_ENABLE, 0).map_err(|(_, io_error)| { ProgramError::SyscallError { call: "PERF_EVENT_IOC_ENABLE".to_owned(), io_error, diff --git a/aya/src/sys/mod.rs b/aya/src/sys/mod.rs index 294ff386..eab48192 100644 --- a/aya/src/sys/mod.rs +++ b/aya/src/sys/mod.rs @@ -6,10 +6,9 @@ mod perf_event; mod fake; use std::io; +use std::os::fd::BorrowedFd; #[cfg(not(test))] -use std::{ffi::CString, mem}; -#[cfg(not(test))] -use std::{fs::File, io::Read}; +use std::{ffi::CString, fs::File, io::Read, mem, os::fd::AsRawFd}; #[cfg(not(test))] use libc::utsname; @@ -39,7 +38,7 @@ pub(crate) enum Syscall<'a> { flags: u32, }, PerfEventIoctl { - fd: c_int, + fd: BorrowedFd<'a>, request: c_int, arg: c_int, }, @@ -68,7 +67,7 @@ unsafe fn syscall_impl(call: Syscall) -> SysResult { flags, } => libc::syscall(SYS_perf_event_open, &attr, pid, cpu, group, flags), PerfEventIoctl { fd, request, arg } => { - libc::ioctl(fd, request.try_into().unwrap(), arg) as libc::c_long + libc::ioctl(fd.as_raw_fd(), request.try_into().unwrap(), arg) as libc::c_long } }; diff --git a/aya/src/sys/perf_event.rs b/aya/src/sys/perf_event.rs index 53764f10..a8d02b49 100644 --- a/aya/src/sys/perf_event.rs +++ b/aya/src/sys/perf_event.rs @@ -1,7 +1,7 @@ use std::{ ffi::CString, io, mem, - os::fd::{FromRawFd, OwnedFd, RawFd}, + os::fd::{BorrowedFd, FromRawFd, OwnedFd, RawFd}, }; use libc::{c_int, pid_t}; @@ -126,7 +126,7 @@ pub(crate) fn perf_event_open_trace_point(id: u32, pid: Option) -> Result Ok(unsafe { OwnedFd::from_raw_fd(fd) }) } -pub(crate) fn perf_event_ioctl(fd: c_int, request: c_int, arg: c_int) -> SysResult { +pub(crate) fn perf_event_ioctl(fd: BorrowedFd<'_>, request: c_int, arg: c_int) -> SysResult { let call = Syscall::PerfEventIoctl { fd, request, arg }; #[cfg(not(test))] return syscall(call);