diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-03-29 22:34:51 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-03-30 02:15:08 +0900 |
| commit | 8886c40974bb64720a23a2ac9780a11e8910bd7f (patch) | |
| tree | fa21ef61482bb80a40b5b1153aee0a9be272f34a /test | |
| parent | 8b62e08b44d255fcb15e94bd2ed721f34c65a726 (diff) | |
test/sandbox: separate check filter
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'test')
| -rw-r--r-- | test/sandbox/assert.go | 43 |
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 } } |
