mirror of https://gitee.com/openkylin/linux.git
tools/power turbostat: Fix 32-bit capabilities warning
warning: `turbostat' uses 32-bit capabilities (legacy support in use) Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
1f81c5efc0
commit
fcaa681c03
|
@ -16,7 +16,7 @@ override CFLAGS += -D_FORTIFY_SOURCE=2
|
|||
|
||||
%: %.c
|
||||
@mkdir -p $(BUILD_OUTPUT)
|
||||
$(CC) $(CFLAGS) $< -o $(BUILD_OUTPUT)/$@ $(LDFLAGS)
|
||||
$(CC) $(CFLAGS) $< -o $(BUILD_OUTPUT)/$@ $(LDFLAGS) -lcap
|
||||
|
||||
.PHONY : clean
|
||||
clean :
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
#include <sched.h>
|
||||
#include <time.h>
|
||||
#include <cpuid.h>
|
||||
#include <linux/capability.h>
|
||||
#include <sys/capability.h>
|
||||
#include <errno.h>
|
||||
#include <math.h>
|
||||
|
||||
|
@ -3150,27 +3150,41 @@ void check_dev_msr()
|
|||
err(-5, "no /dev/cpu/0/msr, Try \"# modprobe msr\" ");
|
||||
}
|
||||
|
||||
void check_permissions()
|
||||
/*
|
||||
* check for CAP_SYS_RAWIO
|
||||
* return 0 on success
|
||||
* return 1 on fail
|
||||
*/
|
||||
int check_for_cap_sys_rawio(void)
|
||||
{
|
||||
cap_t caps;
|
||||
cap_flag_value_t cap_flag_value;
|
||||
|
||||
caps = cap_get_proc();
|
||||
if (caps == NULL)
|
||||
err(-6, "cap_get_proc\n");
|
||||
|
||||
if (cap_get_flag(caps, CAP_SYS_RAWIO, CAP_EFFECTIVE, &cap_flag_value))
|
||||
err(-6, "cap_get\n");
|
||||
|
||||
if (cap_flag_value != CAP_SET) {
|
||||
warnx("capget(CAP_SYS_RAWIO) failed,"
|
||||
" try \"# setcap cap_sys_rawio=ep %s\"", progname);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (cap_free(caps) == -1)
|
||||
err(-6, "cap_free\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
void check_permissions(void)
|
||||
{
|
||||
struct __user_cap_header_struct cap_header_data;
|
||||
cap_user_header_t cap_header = &cap_header_data;
|
||||
struct __user_cap_data_struct cap_data_data;
|
||||
cap_user_data_t cap_data = &cap_data_data;
|
||||
extern int capget(cap_user_header_t hdrp, cap_user_data_t datap);
|
||||
int do_exit = 0;
|
||||
char pathname[32];
|
||||
|
||||
/* check for CAP_SYS_RAWIO */
|
||||
cap_header->pid = getpid();
|
||||
cap_header->version = _LINUX_CAPABILITY_VERSION;
|
||||
if (capget(cap_header, cap_data) < 0)
|
||||
err(-6, "capget(2) failed");
|
||||
|
||||
if ((cap_data->effective & (1 << CAP_SYS_RAWIO)) == 0) {
|
||||
do_exit++;
|
||||
warnx("capget(CAP_SYS_RAWIO) failed,"
|
||||
" try \"# setcap cap_sys_rawio=ep %s\"", progname);
|
||||
}
|
||||
do_exit += check_for_cap_sys_rawio();
|
||||
|
||||
/* test file permissions */
|
||||
sprintf(pathname, "/dev/cpu/%d/msr", base_cpu);
|
||||
|
|
Loading…
Reference in New Issue