lkml.org 
[lkml]   [2020]   [Mar]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.5 20/28] tools/power turbostat: Fix 32-bit capabilities warning
    Date
    From: Len Brown <len.brown@intel.com>

    [ Upstream commit fcaa681c03ea82193e60d7f2cdfd94fbbcd4cae9 ]

    warning: `turbostat' uses 32-bit capabilities (legacy support in use)

    Signed-off-by: Len Brown <len.brown@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    tools/power/x86/turbostat/Makefile | 2 +-
    tools/power/x86/turbostat/turbostat.c | 46 +++++++++++++++++----------
    2 files changed, 31 insertions(+), 17 deletions(-)

    diff --git a/tools/power/x86/turbostat/Makefile b/tools/power/x86/turbostat/Makefile
    index 13f1e8b9ac525..2b6551269e431 100644
    --- a/tools/power/x86/turbostat/Makefile
    +++ b/tools/power/x86/turbostat/Makefile
    @@ -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 :
    diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c
    index 17e82eaf5c4f4..988326b67a916 100644
    --- a/tools/power/x86/turbostat/turbostat.c
    +++ b/tools/power/x86/turbostat/turbostat.c
    @@ -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,28 +3150,42 @@ 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)
    {
    - 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];
    + cap_t caps;
    + cap_flag_value_t cap_flag_value;

    - /* 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");
    + caps = cap_get_proc();
    + if (caps == NULL)
    + err(-6, "cap_get_proc\n");

    - if ((cap_data->effective & (1 << CAP_SYS_RAWIO)) == 0) {
    - do_exit++;
    + 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)
    +{
    + int do_exit = 0;
    + char pathname[32];
    +
    + /* check for CAP_SYS_RAWIO */
    + do_exit += check_for_cap_sys_rawio();
    +
    /* test file permissions */
    sprintf(pathname, "/dev/cpu/%d/msr", base_cpu);
    if (euidaccess(pathname, R_OK)) {
    --
    2.20.1
    \
     
     \ /
      Last update: 2020-03-27 00:29    [W:2.119 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site