aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-03-29 22:34:51 +0900
committerOphestra <cat@gensokyo.uk>2025-03-30 02:15:08 +0900
commit8886c40974bb64720a23a2ac9780a11e8910bd7f (patch)
treefa21ef61482bb80a40b5b1153aee0a9be272f34a /test
parent8b62e08b44d255fcb15e94bd2ed721f34c65a726 (diff)
test/sandbox: separate check filter
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'test')
-rw-r--r--test/sandbox/assert.go43
1 files changed, 35 insertions, 8 deletions
diff --git a/test/sandbox/assert.go b/test/sandbox/assert.go
index 50d078e1..4ba4f1e5 100644
--- a/test/sandbox/assert.go
+++ b/test/sandbox/assert.go
@@ -129,18 +129,43 @@ func (t *T) MustCheck(want *TestCase) {
}
func MustCheckFilter(pid int, want string) {
- if err := ptraceAttach(pid); err != nil {
- fatalf("cannot attach to process %d: %v", pid, err)
+ err := CheckFilter(pid, want)
+ if err == nil {
+ return
}
- buf, err := getFilter[[8]byte](pid, 0)
- if err0 := ptraceDetach(pid); err0 != nil {
- printf("cannot detach from process %d: %v", pid, err0)
+
+ var perr *ptraceError
+ if !errors.As(err, &perr) {
+ fatalf("%s", err)
}
- if err != nil {
- if errors.Is(err, syscall.ENOENT) {
+ switch perr.op {
+ case "PTRACE_ATTACH":
+ fatalf("cannot attach to process %d: %v", pid, err)
+ case "PTRACE_SECCOMP_GET_FILTER":
+ if perr.errno == syscall.ENOENT {
fatalf("seccomp filter not installed for process %d", pid)
}
fatalf("cannot get filter: %v", err)
+ default:
+ fatalf("cannot check filter: %v", err)
+ }
+
+ *(*int)(nil) = 0 // not reached
+}
+
+func CheckFilter(pid int, want string) error {
+ if err := ptraceAttach(pid); err != nil {
+ return err
+ }
+ defer func() {
+ if err := ptraceDetach(pid); err != nil {
+ printf("cannot detach from process %d: %v", pid, err)
+ }
+ }()
+
+ buf, err := getFilter[[8]byte](pid, 0)
+ if err != nil {
+ return err
}
h := sha512.New()
@@ -149,9 +174,11 @@ func MustCheckFilter(pid int, want string) {
}
if got := hex.EncodeToString(h.Sum(nil)); got != want {
- fatalf("[FAIL] %s", got)
+ printf("[FAIL] %s", got)
+ return syscall.ENOTRECOVERABLE
} else {
printf("[ OK ] %s", got)
+ return nil
}
}