18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Capability utilities 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#ifdef HAVE_LIBCAP_SUPPORT 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#include "cap.h" 98c2ecf20Sopenharmony_ci#include <stdbool.h> 108c2ecf20Sopenharmony_ci#include <sys/capability.h> 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_cibool perf_cap__capable(cap_value_t cap) 138c2ecf20Sopenharmony_ci{ 148c2ecf20Sopenharmony_ci cap_flag_value_t val; 158c2ecf20Sopenharmony_ci cap_t caps = cap_get_proc(); 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci if (!caps) 188c2ecf20Sopenharmony_ci return false; 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci if (cap_get_flag(caps, cap, CAP_EFFECTIVE, &val) != 0) 218c2ecf20Sopenharmony_ci val = CAP_CLEAR; 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci if (cap_free(caps) != 0) 248c2ecf20Sopenharmony_ci return false; 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci return val == CAP_SET; 278c2ecf20Sopenharmony_ci} 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci#endif /* HAVE_LIBCAP_SUPPORT */ 30