handle a couple more TODOs

reviewable/pr614/r9
Andrés Medina 2 years ago
parent c2c4095737
commit bfa365732e

@ -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>(())
//! ```

@ -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;

@ -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<ProbeKind>,
event_alias: Option<String>,
) -> Result<PerfLinkInner, ProgramError> {
// 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,

@ -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
}
};

@ -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<pid_t>) -> 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);

Loading…
Cancel
Save