From 6a30ed768d8ab4ea772d190613e7409a9c5447ff Mon Sep 17 00:00:00 2001 From: Julian P Samaroo Date: Tue, 30 Aug 2022 11:03:13 -0500 Subject: [PATCH] API: Add BPF capabilities utility --- src/BPFnative.jl | 1 + src/libcap.jl | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 src/libcap.jl diff --git a/src/BPFnative.jl b/src/BPFnative.jl index e3bec39..c2ce1af 100644 --- a/src/BPFnative.jl +++ b/src/BPFnative.jl @@ -46,6 +46,7 @@ end include("utils.jl") include("common.jl") include("libbpf.jl") +include("libcap.jl") if Sys.islinux() include("network.jl") end diff --git a/src/libcap.jl b/src/libcap.jl new file mode 100644 index 0000000..1fbad4e --- /dev/null +++ b/src/libcap.jl @@ -0,0 +1,17 @@ +const libcap = "/usr/lib/libcap.so" + +const CAP_PERFMON = Cint(39) +const CAP_BPF = Cint(39) +const CAP_EFFECTIVE = Cint(0) +const CAP_SET = Cint(1) + +function add_cap_bpf!() + caps = ccall((:cap_get_proc, libcap), Ptr{Cvoid}, ()) + cap_list = [CAP_BPF,CAP_PERFMON] + @assert ccall((:cap_set_flag, libcap), Cint, + (Ptr{Cvoid}, Cint, Cint, Ptr{Cvoid}, Cint), + caps, CAP_EFFECTIVE, length(cap_list), cap_list, CAP_SET) != 1 + @assert ccall((:cap_set_proc, libcap), Cint, (Ptr{Cvoid},), caps) != -1 + @assert ccall((:cap_free, libcap), Cint, (Ptr{Cvoid},), caps) != -1 + return +end