提交 fcaa681c 编写于 作者: L Len Brown

tools/power turbostat: Fix 32-bit capabilities warning

warning: `turbostat' uses 32-bit capabilities (legacy support in use)
Signed-off-by: NLen Brown <len.brown@intel.com>
上级 1f81c5ef
...@@ -16,7 +16,7 @@ override CFLAGS += -D_FORTIFY_SOURCE=2 ...@@ -16,7 +16,7 @@ override CFLAGS += -D_FORTIFY_SOURCE=2
%: %.c %: %.c
@mkdir -p $(BUILD_OUTPUT) @mkdir -p $(BUILD_OUTPUT)
$(CC) $(CFLAGS) $< -o $(BUILD_OUTPUT)/$@ $(LDFLAGS) $(CC) $(CFLAGS) $< -o $(BUILD_OUTPUT)/$@ $(LDFLAGS) -lcap
.PHONY : clean .PHONY : clean
clean : clean :
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
#include <sched.h> #include <sched.h>
#include <time.h> #include <time.h>
#include <cpuid.h> #include <cpuid.h>
#include <linux/capability.h> #include <sys/capability.h>
#include <errno.h> #include <errno.h>
#include <math.h> #include <math.h>
...@@ -3150,28 +3150,42 @@ void check_dev_msr() ...@@ -3150,28 +3150,42 @@ void check_dev_msr()
err(-5, "no /dev/cpu/0/msr, Try \"# modprobe 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)
{ {
struct __user_cap_header_struct cap_header_data; cap_t caps;
cap_user_header_t cap_header = &cap_header_data; cap_flag_value_t cap_flag_value;
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 */ caps = cap_get_proc();
cap_header->pid = getpid(); if (caps == NULL)
cap_header->version = _LINUX_CAPABILITY_VERSION; err(-6, "cap_get_proc\n");
if (capget(cap_header, cap_data) < 0)
err(-6, "capget(2) failed");
if ((cap_data->effective & (1 << CAP_SYS_RAWIO)) == 0) { if (cap_get_flag(caps, CAP_SYS_RAWIO, CAP_EFFECTIVE, &cap_flag_value))
do_exit++; err(-6, "cap_get\n");
if (cap_flag_value != CAP_SET) {
warnx("capget(CAP_SYS_RAWIO) failed," warnx("capget(CAP_SYS_RAWIO) failed,"
" try \"# setcap cap_sys_rawio=ep %s\"", progname); " 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)
{
int do_exit = 0;
char pathname[32];
/* check for CAP_SYS_RAWIO */
do_exit += check_for_cap_sys_rawio();
/* test file permissions */ /* test file permissions */
sprintf(pathname, "/dev/cpu/%d/msr", base_cpu); sprintf(pathname, "/dev/cpu/%d/msr", base_cpu);
if (euidaccess(pathname, R_OK)) { if (euidaccess(pathname, R_OK)) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册