Merge pull request #523 from dave-tucker/fix_perf_link

aya: Fix is_perf_link_supported
pull/478/head^2
Dave Tucker 2 years ago committed by GitHub
commit 56c143831e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -617,12 +617,12 @@ pub(crate) fn is_perf_link_supported() -> bool {
u.prog_type = bpf_prog_type::BPF_PROG_TYPE_TRACEPOINT as u32; 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 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. // 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) bpf_link_create(fd as i32, -1, bpf_attach_type::BPF_PERF_EVENT, None, 0)
{ {
// Returns EINVAL if unsupported. EBADF if supported. // 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) }; unsafe { libc::close(fd as i32) };
return res; return res;
} }
@ -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);
}
}

Loading…
Cancel
Save