tools/arch/x86/include/uapi/asm/unistd_32.h | 3 +++ tools/arch/x86/include/uapi/asm/unistd_64.h | 3 +++ tools/perf/util/cap.c | 10 +++------- 3 files changed, 9 insertions(+), 7 deletions(-)
As there are duplicated kernel headers in tools/include libc can pick
up the wrong definitions. This was causing the wrong system call for
capget in perf.
Closes: https://lore.kernel.org/lkml/cc7d6bdf-1aeb-4179-9029-4baf50b59342@intel.com/
Signed-off-by: Ian Rogers <irogers@google.com>
---
tools/arch/x86/include/uapi/asm/unistd_32.h | 3 +++
tools/arch/x86/include/uapi/asm/unistd_64.h | 3 +++
tools/perf/util/cap.c | 10 +++-------
3 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/tools/arch/x86/include/uapi/asm/unistd_32.h b/tools/arch/x86/include/uapi/asm/unistd_32.h
index 9de35df1afc3..63182a023e9d 100644
--- a/tools/arch/x86/include/uapi/asm/unistd_32.h
+++ b/tools/arch/x86/include/uapi/asm/unistd_32.h
@@ -11,6 +11,9 @@
#ifndef __NR_getpgid
#define __NR_getpgid 132
#endif
+#ifndef __NR_capget
+#define __NR_capget 184
+#endif
#ifndef __NR_gettid
#define __NR_gettid 224
#endif
diff --git a/tools/arch/x86/include/uapi/asm/unistd_64.h b/tools/arch/x86/include/uapi/asm/unistd_64.h
index d0f2043d7132..77311e8d1b5d 100644
--- a/tools/arch/x86/include/uapi/asm/unistd_64.h
+++ b/tools/arch/x86/include/uapi/asm/unistd_64.h
@@ -11,6 +11,9 @@
#ifndef __NR_getpgid
#define __NR_getpgid 121
#endif
+#ifndef __NR_capget
+#define __NR_capget 125
+#endif
#ifndef __NR_gettid
#define __NR_gettid 186
#endif
diff --git a/tools/perf/util/cap.c b/tools/perf/util/cap.c
index 7574a67651bc..69d9a2bcd40b 100644
--- a/tools/perf/util/cap.c
+++ b/tools/perf/util/cap.c
@@ -7,13 +7,9 @@
#include "debug.h"
#include <errno.h>
#include <string.h>
-#include <unistd.h>
#include <linux/capability.h>
#include <sys/syscall.h>
-
-#ifndef SYS_capget
-#define SYS_capget 90
-#endif
+#include <unistd.h>
#define MAX_LINUX_CAPABILITY_U32S _LINUX_CAPABILITY_U32S_3
@@ -21,9 +17,9 @@ bool perf_cap__capable(int cap, bool *used_root)
{
struct __user_cap_header_struct header = {
.version = _LINUX_CAPABILITY_VERSION_3,
- .pid = getpid(),
+ .pid = 0,
};
- struct __user_cap_data_struct data[MAX_LINUX_CAPABILITY_U32S];
+ struct __user_cap_data_struct data[MAX_LINUX_CAPABILITY_U32S] = {};
__u32 cap_val;
*used_root = false;
--
2.47.0.163.g1226f6d8fa-goog
On Fri, Oct 25, 2024 at 10:54 PM Ian Rogers <irogers@google.com> wrote: > > As there are duplicated kernel headers in tools/include libc can pick > up the wrong definitions. This was causing the wrong system call for > capget in perf. > > Closes: https://lore.kernel.org/lkml/cc7d6bdf-1aeb-4179-9029-4baf50b59342@intel.com/ > Signed-off-by: Ian Rogers <irogers@google.com> Forgot: Fixes: e25ebda78e23 ("perf cap: Tidy up and improve capability testing") Thanks, Ian > --- > tools/arch/x86/include/uapi/asm/unistd_32.h | 3 +++ > tools/arch/x86/include/uapi/asm/unistd_64.h | 3 +++ > tools/perf/util/cap.c | 10 +++------- > 3 files changed, 9 insertions(+), 7 deletions(-) > > diff --git a/tools/arch/x86/include/uapi/asm/unistd_32.h b/tools/arch/x86/include/uapi/asm/unistd_32.h > index 9de35df1afc3..63182a023e9d 100644 > --- a/tools/arch/x86/include/uapi/asm/unistd_32.h > +++ b/tools/arch/x86/include/uapi/asm/unistd_32.h > @@ -11,6 +11,9 @@ > #ifndef __NR_getpgid > #define __NR_getpgid 132 > #endif > +#ifndef __NR_capget > +#define __NR_capget 184 > +#endif > #ifndef __NR_gettid > #define __NR_gettid 224 > #endif > diff --git a/tools/arch/x86/include/uapi/asm/unistd_64.h b/tools/arch/x86/include/uapi/asm/unistd_64.h > index d0f2043d7132..77311e8d1b5d 100644 > --- a/tools/arch/x86/include/uapi/asm/unistd_64.h > +++ b/tools/arch/x86/include/uapi/asm/unistd_64.h > @@ -11,6 +11,9 @@ > #ifndef __NR_getpgid > #define __NR_getpgid 121 > #endif > +#ifndef __NR_capget > +#define __NR_capget 125 > +#endif > #ifndef __NR_gettid > #define __NR_gettid 186 > #endif > diff --git a/tools/perf/util/cap.c b/tools/perf/util/cap.c > index 7574a67651bc..69d9a2bcd40b 100644 > --- a/tools/perf/util/cap.c > +++ b/tools/perf/util/cap.c > @@ -7,13 +7,9 @@ > #include "debug.h" > #include <errno.h> > #include <string.h> > -#include <unistd.h> > #include <linux/capability.h> > #include <sys/syscall.h> > - > -#ifndef SYS_capget > -#define SYS_capget 90 > -#endif > +#include <unistd.h> > > #define MAX_LINUX_CAPABILITY_U32S _LINUX_CAPABILITY_U32S_3 > > @@ -21,9 +17,9 @@ bool perf_cap__capable(int cap, bool *used_root) > { > struct __user_cap_header_struct header = { > .version = _LINUX_CAPABILITY_VERSION_3, > - .pid = getpid(), > + .pid = 0, > }; > - struct __user_cap_data_struct data[MAX_LINUX_CAPABILITY_U32S]; > + struct __user_cap_data_struct data[MAX_LINUX_CAPABILITY_U32S] = {}; > __u32 cap_val; > > *used_root = false; > -- > 2.47.0.163.g1226f6d8fa-goog >
On 26/10/24 09:00, Ian Rogers wrote: > On Fri, Oct 25, 2024 at 10:54 PM Ian Rogers <irogers@google.com> wrote: >> >> As there are duplicated kernel headers in tools/include libc can pick >> up the wrong definitions. This was causing the wrong system call for >> capget in perf. >> >> Closes: https://lore.kernel.org/lkml/cc7d6bdf-1aeb-4179-9029-4baf50b59342@intel.com/ >> Signed-off-by: Ian Rogers <irogers@google.com> > > Forgot: > Fixes: e25ebda78e23 ("perf cap: Tidy up and improve capability testing") Works for me, thank you! Tested-by: Adrian Hunter <adrian.hunter@intel.com> > > Thanks, > Ian > >> --- >> tools/arch/x86/include/uapi/asm/unistd_32.h | 3 +++ >> tools/arch/x86/include/uapi/asm/unistd_64.h | 3 +++ >> tools/perf/util/cap.c | 10 +++------- >> 3 files changed, 9 insertions(+), 7 deletions(-) >> >> diff --git a/tools/arch/x86/include/uapi/asm/unistd_32.h b/tools/arch/x86/include/uapi/asm/unistd_32.h >> index 9de35df1afc3..63182a023e9d 100644 >> --- a/tools/arch/x86/include/uapi/asm/unistd_32.h >> +++ b/tools/arch/x86/include/uapi/asm/unistd_32.h >> @@ -11,6 +11,9 @@ >> #ifndef __NR_getpgid >> #define __NR_getpgid 132 >> #endif >> +#ifndef __NR_capget >> +#define __NR_capget 184 >> +#endif >> #ifndef __NR_gettid >> #define __NR_gettid 224 >> #endif >> diff --git a/tools/arch/x86/include/uapi/asm/unistd_64.h b/tools/arch/x86/include/uapi/asm/unistd_64.h >> index d0f2043d7132..77311e8d1b5d 100644 >> --- a/tools/arch/x86/include/uapi/asm/unistd_64.h >> +++ b/tools/arch/x86/include/uapi/asm/unistd_64.h >> @@ -11,6 +11,9 @@ >> #ifndef __NR_getpgid >> #define __NR_getpgid 121 >> #endif >> +#ifndef __NR_capget >> +#define __NR_capget 125 >> +#endif >> #ifndef __NR_gettid >> #define __NR_gettid 186 >> #endif >> diff --git a/tools/perf/util/cap.c b/tools/perf/util/cap.c >> index 7574a67651bc..69d9a2bcd40b 100644 >> --- a/tools/perf/util/cap.c >> +++ b/tools/perf/util/cap.c >> @@ -7,13 +7,9 @@ >> #include "debug.h" >> #include <errno.h> >> #include <string.h> >> -#include <unistd.h> >> #include <linux/capability.h> >> #include <sys/syscall.h> >> - >> -#ifndef SYS_capget >> -#define SYS_capget 90 >> -#endif >> +#include <unistd.h> >> >> #define MAX_LINUX_CAPABILITY_U32S _LINUX_CAPABILITY_U32S_3 >> >> @@ -21,9 +17,9 @@ bool perf_cap__capable(int cap, bool *used_root) >> { >> struct __user_cap_header_struct header = { >> .version = _LINUX_CAPABILITY_VERSION_3, >> - .pid = getpid(), >> + .pid = 0, >> }; >> - struct __user_cap_data_struct data[MAX_LINUX_CAPABILITY_U32S]; >> + struct __user_cap_data_struct data[MAX_LINUX_CAPABILITY_U32S] = {}; >> __u32 cap_val; >> >> *used_root = false; >> -- >> 2.47.0.163.g1226f6d8fa-goog >>
On Mon, Oct 28, 2024 at 09:25:36AM +0200, Adrian Hunter wrote: > On 26/10/24 09:00, Ian Rogers wrote: > > On Fri, Oct 25, 2024 at 10:54 PM Ian Rogers <irogers@google.com> wrote: > >> > >> As there are duplicated kernel headers in tools/include libc can pick > >> up the wrong definitions. This was causing the wrong system call for > >> capget in perf. > >> > >> Closes: https://lore.kernel.org/lkml/cc7d6bdf-1aeb-4179-9029-4baf50b59342@intel.com/ > >> Signed-off-by: Ian Rogers <irogers@google.com> > > > > Forgot: > > Fixes: e25ebda78e23 ("perf cap: Tidy up and improve capability testing") > > Works for me, thank you! > > Tested-by: Adrian Hunter <adrian.hunter@intel.com> Thanks, I also added this: Reported-by: Adrian Hunter <adrian.hunter@intel.com> Applied to perf-tools, for v6.12-rc. - Arnaldo > > > > Thanks, > > Ian > > > >> --- > >> tools/arch/x86/include/uapi/asm/unistd_32.h | 3 +++ > >> tools/arch/x86/include/uapi/asm/unistd_64.h | 3 +++ > >> tools/perf/util/cap.c | 10 +++------- > >> 3 files changed, 9 insertions(+), 7 deletions(-) > >> > >> diff --git a/tools/arch/x86/include/uapi/asm/unistd_32.h b/tools/arch/x86/include/uapi/asm/unistd_32.h > >> index 9de35df1afc3..63182a023e9d 100644 > >> --- a/tools/arch/x86/include/uapi/asm/unistd_32.h > >> +++ b/tools/arch/x86/include/uapi/asm/unistd_32.h > >> @@ -11,6 +11,9 @@ > >> #ifndef __NR_getpgid > >> #define __NR_getpgid 132 > >> #endif > >> +#ifndef __NR_capget > >> +#define __NR_capget 184 > >> +#endif > >> #ifndef __NR_gettid > >> #define __NR_gettid 224 > >> #endif > >> diff --git a/tools/arch/x86/include/uapi/asm/unistd_64.h b/tools/arch/x86/include/uapi/asm/unistd_64.h > >> index d0f2043d7132..77311e8d1b5d 100644 > >> --- a/tools/arch/x86/include/uapi/asm/unistd_64.h > >> +++ b/tools/arch/x86/include/uapi/asm/unistd_64.h > >> @@ -11,6 +11,9 @@ > >> #ifndef __NR_getpgid > >> #define __NR_getpgid 121 > >> #endif > >> +#ifndef __NR_capget > >> +#define __NR_capget 125 > >> +#endif > >> #ifndef __NR_gettid > >> #define __NR_gettid 186 > >> #endif > >> diff --git a/tools/perf/util/cap.c b/tools/perf/util/cap.c > >> index 7574a67651bc..69d9a2bcd40b 100644 > >> --- a/tools/perf/util/cap.c > >> +++ b/tools/perf/util/cap.c > >> @@ -7,13 +7,9 @@ > >> #include "debug.h" > >> #include <errno.h> > >> #include <string.h> > >> -#include <unistd.h> > >> #include <linux/capability.h> > >> #include <sys/syscall.h> > >> - > >> -#ifndef SYS_capget > >> -#define SYS_capget 90 > >> -#endif > >> +#include <unistd.h> > >> > >> #define MAX_LINUX_CAPABILITY_U32S _LINUX_CAPABILITY_U32S_3 > >> > >> @@ -21,9 +17,9 @@ bool perf_cap__capable(int cap, bool *used_root) > >> { > >> struct __user_cap_header_struct header = { > >> .version = _LINUX_CAPABILITY_VERSION_3, > >> - .pid = getpid(), > >> + .pid = 0, > >> }; > >> - struct __user_cap_data_struct data[MAX_LINUX_CAPABILITY_U32S]; > >> + struct __user_cap_data_struct data[MAX_LINUX_CAPABILITY_U32S] = {}; > >> __u32 cap_val; > >> > >> *used_root = false; > >> -- > >> 2.47.0.163.g1226f6d8fa-goog > >>
© 2016 - 2024 Red Hat, Inc.