All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH testsuite 0/3] perf_event: fixes and cleanups
@ 2021-03-02 17:21 Ondrej Mosnacek
  2021-03-02 17:21 ` [PATCH testsuite 1/3] perf_event: measure CPU 0 rather than CPU 1 Ondrej Mosnacek
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Ondrej Mosnacek @ 2021-03-02 17:21 UTC (permalink / raw)
  To: selinux

See individual patches for details.

Ondrej Mosnacek (3):
  perf_event: measure CPU 0 rather than CPU 1
  perf_event: fix wrong use of perf_event_open(2) API
  perf_event: fix CAP_SYS_ADMIN references

 tests/perf_event/perf_event.c | 18 +++++++++++-----
 tests/perf_event/test         | 39 ++++++++++++++++++++++-------------
 2 files changed, 38 insertions(+), 19 deletions(-)

-- 
2.29.2


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH testsuite 1/3] perf_event: measure CPU 0 rather than CPU 1
  2021-03-02 17:21 [PATCH testsuite 0/3] perf_event: fixes and cleanups Ondrej Mosnacek
@ 2021-03-02 17:21 ` Ondrej Mosnacek
  2021-03-02 17:21 ` [PATCH testsuite 2/3] perf_event: fix wrong use of perf_event_open(2) API Ondrej Mosnacek
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Ondrej Mosnacek @ 2021-03-02 17:21 UTC (permalink / raw)
  To: selinux

Change the "cpu" argument of perf_event_open(2) to 0, so that the test
doesn't fail on single-core machines.

This makes the perf_event pass in the GH Actions CI.

Fixes: b9e1eb2db689 ("selinux-testsuite: Add perf_event tests")
Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
---
 tests/perf_event/perf_event.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/perf_event/perf_event.c b/tests/perf_event/perf_event.c
index 8983f02..1557303 100644
--- a/tests/perf_event/perf_event.c
+++ b/tests/perf_event/perf_event.c
@@ -82,7 +82,7 @@ int main(int argc, char **argv)
 	pe_attr.disabled = 1;
 	pe_attr.exclude_hv = 1;
 
-	fd = perf_event_open(&pe_attr, -1, 1, -1, 0);
+	fd = perf_event_open(&pe_attr, -1, 0, -1, 0);
 	if (fd < 0) {
 		fprintf(stderr, "Failed perf_event_open(): %s\n",
 			strerror(errno));
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH testsuite 2/3] perf_event: fix wrong use of perf_event_open(2) API
  2021-03-02 17:21 [PATCH testsuite 0/3] perf_event: fixes and cleanups Ondrej Mosnacek
  2021-03-02 17:21 ` [PATCH testsuite 1/3] perf_event: measure CPU 0 rather than CPU 1 Ondrej Mosnacek
@ 2021-03-02 17:21 ` Ondrej Mosnacek
  2021-03-02 17:21 ` [PATCH testsuite 3/3] perf_event: fix CAP_SYS_ADMIN references Ondrej Mosnacek
  2021-03-04 10:29 ` [PATCH testsuite 0/3] perf_event: fixes and cleanups Ondrej Mosnacek
  3 siblings, 0 replies; 6+ messages in thread
From: Ondrej Mosnacek @ 2021-03-02 17:21 UTC (permalink / raw)
  To: selinux

1. attr.type is not a bit field, but an enum. Use PERF_TYPE_TRACEPOINT,
   which is equivalent to current code (PERF_TYPE_HARDWARE == 0).
2. attr.config for PERF_TYPE_TRACEPOINT is the ID of the trace event to
   monitor; PERF_COUNT_HW_INSTRUCTIONS is meaningful only for
   PERF_TYPE_HARDWARE. Replace it by the ID of "ftrace:function"
   obtained from tracefs. "ftrace:function" usually has the ID of 1,
   which is the numeric value of PERF_COUNT_HW_INSTRUCTIONS, so this
   should be functionally equivalent.

Fixes: b9e1eb2db689 ("selinux-testsuite: Add perf_event tests")
Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
---
 tests/perf_event/perf_event.c | 16 ++++++++++++----
 tests/perf_event/test         | 29 ++++++++++++++++++++---------
 2 files changed, 32 insertions(+), 13 deletions(-)

diff --git a/tests/perf_event/perf_event.c b/tests/perf_event/perf_event.c
index 1557303..453aa91 100644
--- a/tests/perf_event/perf_event.c
+++ b/tests/perf_event/perf_event.c
@@ -20,8 +20,9 @@ enum {
 static void print_usage(char *progname)
 {
 	fprintf(stderr,
-		"usage:  %s [-f|-m] [-v]\n"
+		"usage:  %s [-f|-m] [-v] EVENT_ID\n"
 		"Where:\n\t"
+		"EVENT_ID  target ftrace event ID\n\n\t"
 		"-f  Read perf_event info using read(2)\n\t"
 		"-m  Read perf_event info using mmap(2)\n\t"
 		"    Default is to use read(2) and mmap(2)\n\t"
@@ -39,7 +40,7 @@ static long perf_event_open(struct perf_event_attr *hw_event, pid_t pid,
 int main(int argc, char **argv)
 {
 	int opt, result, page_size, mmap_size, fd;
-	long long count;
+	long long count, event_id;
 	bool verbose = false;
 	char *context;
 	void *base;
@@ -64,6 +65,13 @@ int main(int argc, char **argv)
 		}
 	}
 
+	if ((argc - optind) != 1)
+		print_usage(argv[0]);
+
+	event_id = atoll(argv[optind]);
+	if (event_id < 0)
+		print_usage(argv[0]);
+
 	if (verbose) {
 		result = getcon(&context);
 		if (result < 0) {
@@ -76,9 +84,9 @@ int main(int argc, char **argv)
 
 	/* Test perf_event { open cpu kernel tracepoint } */
 	memset(&pe_attr, 0, sizeof(struct perf_event_attr));
-	pe_attr.type = PERF_TYPE_HARDWARE | PERF_TYPE_TRACEPOINT;
+	pe_attr.type = PERF_TYPE_TRACEPOINT;
 	pe_attr.size = sizeof(struct perf_event_attr);
-	pe_attr.config = PERF_COUNT_HW_INSTRUCTIONS;
+	pe_attr.config = event_id;
 	pe_attr.disabled = 1;
 	pe_attr.exclude_hv = 1;
 
diff --git a/tests/perf_event/test b/tests/perf_event/test
index 1d337e9..561a634 100755
--- a/tests/perf_event/test
+++ b/tests/perf_event/test
@@ -48,45 +48,56 @@ BEGIN {
     plan tests => $test_count;
 }
 
+$event_id = `cat /sys/kernel/debug/tracing/events/ftrace/function/id`;
+chomp($event_id);
+
 # perf_event { open cpu kernel tracepoint read write };
 print "Test perf_event\n";
-$result = system "runcon -t test_perf_t $basedir/perf_event $v";
+$result = system "runcon -t test_perf_t $basedir/perf_event $v $event_id";
 ok( $result eq 0 );
 
 if ($sys_admin) {
 
     # Deny capability { sys_admin } - EACCES perf_event_open(2)
-    $result = system "runcon -t test_perf_no_cap_t $basedir/perf_event $v 2>&1";
+    $result = system
+      "runcon -t test_perf_no_cap_t $basedir/perf_event $v $event_id 2>&1";
     ok( $result >> 8 eq 1 );
 }
 
 # Deny perf_event { open } - EACCES perf_event_open(2)
-$result = system "runcon -t test_perf_no_open_t $basedir/perf_event $v 2>&1";
+$result =
+  system "runcon -t test_perf_no_open_t $basedir/perf_event $v $event_id 2>&1";
 ok( $result >> 8 eq 1 );
 
 # Deny perf_event { cpu } - EACCES perf_event_open(2)
-$result = system "runcon -t test_perf_no_cpu_t $basedir/perf_event $v 2>&1";
+$result =
+  system "runcon -t test_perf_no_cpu_t $basedir/perf_event $v $event_id 2>&1";
 ok( $result >> 8 eq 1 );
 
 # Deny perf_event { kernel } - EACCES perf_event_open(2)
-$result = system "runcon -t test_perf_no_kernel_t $basedir/perf_event $v 2>&1";
+$result = system
+  "runcon -t test_perf_no_kernel_t $basedir/perf_event $v $event_id 2>&1";
 ok( $result >> 8 eq 1 );
 
 # Deny perf_event { tracepoint } - EACCES perf_event_open(2)
 $result =
-  system "runcon -t test_perf_no_tracepoint_t $basedir/perf_event $v 2>&1";
+  system
+  "runcon -t test_perf_no_tracepoint_t $basedir/perf_event $v $event_id 2>&1";
 ok( $result >> 8 eq 1 );
 
 # Deny perf_event { read } - EACCES mmap(2)
-$result = system "runcon -t test_perf_no_read_t $basedir/perf_event -m $v 2>&1";
+$result = system
+  "runcon -t test_perf_no_read_t $basedir/perf_event -m $v $event_id 2>&1";
 ok( $result >> 8 eq 6 );
 
 # Deny perf_event { read } - EACCES read(2)
-$result = system "runcon -t test_perf_no_read_t $basedir/perf_event -f $v 2>&1";
+$result = system
+  "runcon -t test_perf_no_read_t $basedir/perf_event -f $v $event_id 2>&1";
 ok( $result >> 8 eq 7 );
 
 # Deny perf_event { write } - EACCES ioctl(2) write
-$result = system "runcon -t test_perf_no_write_t $basedir/perf_event $v 2>&1";
+$result =
+  system "runcon -t test_perf_no_write_t $basedir/perf_event $v $event_id 2>&1";
 ok( $result >> 8 eq 2 );
 
 exit;
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH testsuite 3/3] perf_event: fix CAP_SYS_ADMIN references
  2021-03-02 17:21 [PATCH testsuite 0/3] perf_event: fixes and cleanups Ondrej Mosnacek
  2021-03-02 17:21 ` [PATCH testsuite 1/3] perf_event: measure CPU 0 rather than CPU 1 Ondrej Mosnacek
  2021-03-02 17:21 ` [PATCH testsuite 2/3] perf_event: fix wrong use of perf_event_open(2) API Ondrej Mosnacek
@ 2021-03-02 17:21 ` Ondrej Mosnacek
  2021-03-04 10:29 ` [PATCH testsuite 0/3] perf_event: fixes and cleanups Ondrej Mosnacek
  3 siblings, 0 replies; 6+ messages in thread
From: Ondrej Mosnacek @ 2021-03-02 17:21 UTC (permalink / raw)
  To: selinux

Fix the references to CAP_SYS_ADMIN in comments and variable names to
refer to CAP_PERFMON or just "capability" to avoid confusion. As of
commit 259751492b58 ("perf_event: update perf_event test for the new
CAP_PERFMON capability"), CAP_PERFMON is tested as the main capability
that gates access to perf events, rather than CAP_SYS_ADMIN, which is
now used only as a compatibility fallback.

Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
---
 tests/perf_event/test | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/tests/perf_event/test b/tests/perf_event/test
index 561a634..380d9cc 100755
--- a/tests/perf_event/test
+++ b/tests/perf_event/test
@@ -6,7 +6,7 @@ BEGIN {
     $basedir =~ s|(.*)/[^/]*|$1|;
 
     $test_count = 8;
-    $sys_admin  = 0;
+    $capability = 0;
 
     # allow info to be shown during tests
     $v = $ARGV[0];
@@ -21,9 +21,9 @@ BEGIN {
 
     $level = `cat /proc/sys/kernel/perf_event_paranoid`;
     chomp($level);
-    if ( $level >= 2 ) {    # These tests require CAP_SYS_ADMIN
+    if ( $level >= 2 ) {    # These tests require CAP_PERFMON
         $test_count += 1;
-        $sys_admin = 1;
+        $capability = 1;
     }
 
     if ( $v eq "-v" ) {
@@ -56,9 +56,9 @@ print "Test perf_event\n";
 $result = system "runcon -t test_perf_t $basedir/perf_event $v $event_id";
 ok( $result eq 0 );
 
-if ($sys_admin) {
+if ($capability) {
 
-    # Deny capability { sys_admin } - EACCES perf_event_open(2)
+    # Deny capability { perfmon } - EACCES perf_event_open(2)
     $result = system
       "runcon -t test_perf_no_cap_t $basedir/perf_event $v $event_id 2>&1";
     ok( $result >> 8 eq 1 );
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH testsuite 0/3] perf_event: fixes and cleanups
  2021-03-02 17:21 [PATCH testsuite 0/3] perf_event: fixes and cleanups Ondrej Mosnacek
                   ` (2 preceding siblings ...)
  2021-03-02 17:21 ` [PATCH testsuite 3/3] perf_event: fix CAP_SYS_ADMIN references Ondrej Mosnacek
@ 2021-03-04 10:29 ` Ondrej Mosnacek
  2021-03-04 20:24   ` Paul Moore
  3 siblings, 1 reply; 6+ messages in thread
From: Ondrej Mosnacek @ 2021-03-04 10:29 UTC (permalink / raw)
  To: SElinux list

On Tue, Mar 2, 2021 at 6:21 PM Ondrej Mosnacek <omosnace@redhat.com> wrote:
>
> See individual patches for details.
>
> Ondrej Mosnacek (3):
>   perf_event: measure CPU 0 rather than CPU 1
>   perf_event: fix wrong use of perf_event_open(2) API
>   perf_event: fix CAP_SYS_ADMIN references
>
>  tests/perf_event/perf_event.c | 18 +++++++++++-----
>  tests/perf_event/test         | 39 ++++++++++++++++++++++-------------
>  2 files changed, 38 insertions(+), 19 deletions(-)
>
> --
> 2.29.2

These are now merged as well, and we have a green CI again \o/  (At
least in my fork; CI on upstream master is still running.)

-- 
Ondrej Mosnacek
Software Engineer, Linux Security - SELinux kernel
Red Hat, Inc.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH testsuite 0/3] perf_event: fixes and cleanups
  2021-03-04 10:29 ` [PATCH testsuite 0/3] perf_event: fixes and cleanups Ondrej Mosnacek
@ 2021-03-04 20:24   ` Paul Moore
  0 siblings, 0 replies; 6+ messages in thread
From: Paul Moore @ 2021-03-04 20:24 UTC (permalink / raw)
  To: Ondrej Mosnacek; +Cc: SElinux list

On Thu, Mar 4, 2021 at 5:35 AM Ondrej Mosnacek <omosnace@redhat.com> wrote:
> On Tue, Mar 2, 2021 at 6:21 PM Ondrej Mosnacek <omosnace@redhat.com> wrote:
> >
> > See individual patches for details.
> >
> > Ondrej Mosnacek (3):
> >   perf_event: measure CPU 0 rather than CPU 1
> >   perf_event: fix wrong use of perf_event_open(2) API
> >   perf_event: fix CAP_SYS_ADMIN references
> >
> >  tests/perf_event/perf_event.c | 18 +++++++++++-----
> >  tests/perf_event/test         | 39 ++++++++++++++++++++++-------------
> >  2 files changed, 38 insertions(+), 19 deletions(-)
> >
> > --
> > 2.29.2
>
> These are now merged as well, and we have a green CI again \o/  (At
> least in my fork; CI on upstream master is still running.)

Things are looking good on both my x86_64 and aarch64 test systems too - thanks!

-- 
paul moore
www.paul-moore.com

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-03-04 20:26 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-02 17:21 [PATCH testsuite 0/3] perf_event: fixes and cleanups Ondrej Mosnacek
2021-03-02 17:21 ` [PATCH testsuite 1/3] perf_event: measure CPU 0 rather than CPU 1 Ondrej Mosnacek
2021-03-02 17:21 ` [PATCH testsuite 2/3] perf_event: fix wrong use of perf_event_open(2) API Ondrej Mosnacek
2021-03-02 17:21 ` [PATCH testsuite 3/3] perf_event: fix CAP_SYS_ADMIN references Ondrej Mosnacek
2021-03-04 10:29 ` [PATCH testsuite 0/3] perf_event: fixes and cleanups Ondrej Mosnacek
2021-03-04 20:24   ` Paul Moore

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.