From: Reinhard Tartler <siretart@tauware.de>
Date: Sun, 24 Aug 2025 06:27:19 -0400
Subject: Skip tests that require permissions not found inside user namespaces
Forwarded: not-needed

---
 internal/testutils/bpffs.go         | 4 ++++
 internal/tracefs/kprobe_test.go     | 4 ++++
 internal/tracefs/perf_event_test.go | 4 ++++
 rlimit/rlimit_linux_test.go         | 4 ++++
 4 files changed, 16 insertions(+)

diff --git a/internal/testutils/bpffs.go b/internal/testutils/bpffs.go
index 7df15a3..2e46596 100644
--- a/internal/testutils/bpffs.go
+++ b/internal/testutils/bpffs.go
@@ -2,6 +2,7 @@ package testutils
 
 import (
 	"os"
+	"strings"
 	"testing"
 )
 
@@ -13,6 +14,9 @@ func TempBPFFS(tb testing.TB) string {
 
 	tmp, err := os.MkdirTemp("/sys/fs/bpf", "ebpf-test")
 	if err != nil {
+		if strings.Contains(err.Error(), "permission denied") {
+			tb.Skipf("Skipping test: %v", err)
+		}
 		tb.Fatal("Create temporary directory on BPFFS:", err)
 	}
 	tb.Cleanup(func() { os.RemoveAll(tmp) })
diff --git a/internal/tracefs/kprobe_test.go b/internal/tracefs/kprobe_test.go
index 78b60c6..7912164 100644
--- a/internal/tracefs/kprobe_test.go
+++ b/internal/tracefs/kprobe_test.go
@@ -3,6 +3,7 @@ package tracefs
 import (
 	"fmt"
 	"os"
+	"strings"
 	"testing"
 
 	"github.com/go-quicktest/qt"
@@ -66,6 +67,9 @@ func TestNewEvent(t *testing.T) {
 
 			evt, err := NewEvent(args)
 			testutils.SkipIfNotSupportedOnOS(t, err)
+			if err != nil && strings.Contains(err.Error(), "permission denied") {
+				t.Skipf("Skipping test: %v", err)
+			}
 			qt.Assert(t, qt.IsNil(err))
 			defer evt.Close()
 
diff --git a/internal/tracefs/perf_event_test.go b/internal/tracefs/perf_event_test.go
index 1164ef7..a03fede 100644
--- a/internal/tracefs/perf_event_test.go
+++ b/internal/tracefs/perf_event_test.go
@@ -4,6 +4,7 @@ import (
 	"errors"
 	"fmt"
 	"os"
+	"strings"
 	"testing"
 
 	"github.com/go-quicktest/qt"
@@ -14,6 +15,9 @@ import (
 func TestEventID(t *testing.T) {
 	eid, err := EventID("syscalls", "sys_enter_mmap")
 	testutils.SkipIfNotSupportedOnOS(t, err)
+	if err != nil && strings.Contains(err.Error(), "permission denied") {
+		t.Skipf("Skipping test: %v", err)
+	}
 	qt.Assert(t, qt.IsNil(err))
 	qt.Assert(t, qt.Not(qt.Equals(eid, 0)))
 }
diff --git a/rlimit/rlimit_linux_test.go b/rlimit/rlimit_linux_test.go
index 95f1cfc..bcfbaad 100644
--- a/rlimit/rlimit_linux_test.go
+++ b/rlimit/rlimit_linux_test.go
@@ -1,6 +1,7 @@
 package rlimit
 
 import (
+	"strings"
 	"testing"
 
 	"github.com/cilium/ebpf/internal/linux"
@@ -14,6 +15,9 @@ func TestRemoveMemlock(t *testing.T) {
 	qt.Assert(t, qt.IsNil(unix.Prlimit(0, unix.RLIMIT_MEMLOCK, nil, &before)))
 
 	err := RemoveMemlock()
+	if err != nil && strings.Contains(err.Error(), "operation not permitted") {
+		t.Skipf("Skipping test: %v", err)
+	}
 	qt.Assert(t, qt.IsNil(err))
 
 	var after unix.Rlimit
