Skip to content

Commit

Permalink
Merge pull request #523 from dave-tucker/fix_perf_link
Browse files Browse the repository at this point in the history
aya: Fix is_perf_link_supported
  • Loading branch information
dave-tucker committed Feb 13, 2023
2 parents d7d6442 + ce79de7 commit 56c1438
Showing 1 changed file with 32 additions and 2 deletions.
34 changes: 32 additions & 2 deletions aya/src/sys/bpf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -617,12 +617,12 @@ pub(crate) fn is_perf_link_supported() -> bool {
u.prog_type = bpf_prog_type::BPF_PROG_TYPE_TRACEPOINT as u32;

if let Ok(fd) = sys_bpf(bpf_cmd::BPF_PROG_LOAD, &attr) {
if let Err((code, _)) =
if let Err((_, e)) =
// Uses an invalid target FD so we get EBADF if supported.
bpf_link_create(fd as i32, -1, bpf_attach_type::BPF_PERF_EVENT, None, 0)
{
// Returns EINVAL if unsupported. EBADF if supported.
let res = code == (-libc::EBADF).into();
let res = e.raw_os_error() == Some(libc::EBADF);
unsafe { libc::close(fd as i32) };
return res;
}
Expand Down Expand Up @@ -892,3 +892,33 @@ where
}
}
}

#[cfg(test)]
mod tests {
use super::*;
use crate::sys::override_syscall;
use libc::{EBADF, EINVAL};

#[test]
fn test_perf_link_supported() {
override_syscall(|call| match call {
Syscall::Bpf {
cmd: bpf_cmd::BPF_LINK_CREATE,
..
} => Err((-1, io::Error::from_raw_os_error(EBADF))),
_ => Ok(42),
});
let supported = is_perf_link_supported();
assert!(supported);

override_syscall(|call| match call {
Syscall::Bpf {
cmd: bpf_cmd::BPF_LINK_CREATE,
..
} => Err((-1, io::Error::from_raw_os_error(EINVAL))),
_ => Ok(42),
});
let supported = is_perf_link_supported();
assert!(!supported);
}
}

0 comments on commit 56c1438

Please sign in to comment.