From 3e8a279a5910badd4720c06f2a046e47e6a6f657 Mon Sep 17 00:00:00 2001 From: Alessandro Decina Date: Sun, 14 Feb 2021 19:38:12 +0000 Subject: [PATCH] Fix build with musl --- aya/include/linux_wrapper.h | 3 ++- aya/scripts/gen-bindings | 4 +++- aya/src/generated/linux_bindings_aarch64.rs | 2 ++ aya/src/generated/linux_bindings_x86_64.rs | 2 ++ aya/src/programs/socket_filter.rs | 8 ++++---- aya/src/sys/mod.rs | 6 ++++-- 6 files changed, 17 insertions(+), 8 deletions(-) diff --git a/aya/include/linux_wrapper.h b/aya/include/linux_wrapper.h index e14bcbec..f4127139 100644 --- a/aya/include/linux_wrapper.h +++ b/aya/include/linux_wrapper.h @@ -2,4 +2,5 @@ #include #include #include -#include \ No newline at end of file +#include +#include diff --git a/aya/scripts/gen-bindings b/aya/scripts/gen-bindings index df174682..e5e037dd 100755 --- a/aya/scripts/gen-bindings +++ b/aya/scripts/gen-bindings @@ -36,7 +36,9 @@ BPF_VARS="\ BPF_DW \ BPF_W \ BPF_H \ - BPF_B + BPF_B \ + SO_ATTACH_BPF \ + SO_DETACH_BPF " BTF_TYPES="\ diff --git a/aya/src/generated/linux_bindings_aarch64.rs b/aya/src/generated/linux_bindings_aarch64.rs index 92421e69..386d9ece 100644 --- a/aya/src/generated/linux_bindings_aarch64.rs +++ b/aya/src/generated/linux_bindings_aarch64.rs @@ -128,6 +128,8 @@ pub const XDP_FLAGS_HW_MODE: u32 = 8; pub const XDP_FLAGS_REPLACE: u32 = 16; pub const XDP_FLAGS_MODES: u32 = 14; pub const XDP_FLAGS_MASK: u32 = 31; +pub const SO_ATTACH_BPF: u32 = 50; +pub const SO_DETACH_BPF: u32 = 27; pub type __u8 = ::std::os::raw::c_uchar; pub type __s16 = ::std::os::raw::c_short; pub type __u16 = ::std::os::raw::c_ushort; diff --git a/aya/src/generated/linux_bindings_x86_64.rs b/aya/src/generated/linux_bindings_x86_64.rs index f70f12e8..f7e26723 100644 --- a/aya/src/generated/linux_bindings_x86_64.rs +++ b/aya/src/generated/linux_bindings_x86_64.rs @@ -128,6 +128,8 @@ pub const XDP_FLAGS_HW_MODE: u32 = 8; pub const XDP_FLAGS_REPLACE: u32 = 16; pub const XDP_FLAGS_MODES: u32 = 14; pub const XDP_FLAGS_MASK: u32 = 31; +pub const SO_ATTACH_BPF: u32 = 50; +pub const SO_DETACH_BPF: u32 = 27; pub type __u8 = ::std::os::raw::c_uchar; pub type __s16 = ::std::os::raw::c_short; pub type __u16 = ::std::os::raw::c_ushort; diff --git a/aya/src/programs/socket_filter.rs b/aya/src/programs/socket_filter.rs index a3786f09..724b3f6a 100644 --- a/aya/src/programs/socket_filter.rs +++ b/aya/src/programs/socket_filter.rs @@ -1,9 +1,9 @@ -use libc::{setsockopt, SOL_SOCKET, SO_ATTACH_BPF, SO_DETACH_BPF}; +use libc::{setsockopt, SOL_SOCKET}; use std::{io, mem, os::unix::prelude::RawFd}; use thiserror::Error; use crate::{ - generated::bpf_prog_type::BPF_PROG_TYPE_SOCKET_FILTER, + generated::{bpf_prog_type::BPF_PROG_TYPE_SOCKET_FILTER, SO_ATTACH_BPF, SO_DETACH_BPF}, programs::{load_program, Link, LinkRef, ProgramData, ProgramError}, }; @@ -33,7 +33,7 @@ impl SocketFilter { setsockopt( socket, SOL_SOCKET, - SO_ATTACH_BPF, + SO_ATTACH_BPF as i32, &prog_fd as *const _ as *const _, mem::size_of::() as u32, ) @@ -64,7 +64,7 @@ impl Link for SocketFilterLink { setsockopt( self.socket, SOL_SOCKET, - SO_DETACH_BPF, + SO_DETACH_BPF as i32, &fd as *const _ as *const _, mem::size_of::() as u32, ); diff --git a/aya/src/sys/mod.rs b/aya/src/sys/mod.rs index ab61c2c5..35032a73 100644 --- a/aya/src/sys/mod.rs +++ b/aya/src/sys/mod.rs @@ -5,7 +5,7 @@ mod perf_event; #[cfg(test)] mod fake; -use std::{ffi::CString, io, mem}; +use std::{convert::TryInto, ffi::CString, io, mem}; use libc::{c_int, c_long, c_ulong, pid_t, utsname}; @@ -61,7 +61,9 @@ unsafe fn syscall_impl(call: Syscall) -> SysResult { group, flags, } => libc::syscall(SYS_perf_event_open, &attr, pid, cpu, group, flags), - PerfEventIoctl { fd, request, arg } => libc::ioctl(fd, request, arg) as i64, + PerfEventIoctl { fd, request, arg } => { + libc::ioctl(fd, request.try_into().unwrap(), arg) as i64 + } }; if ret < 0 {