Skip to content

Commit 0353a0b

Browse files
tyhicksmheon
authored andcommitted
golang: Add ActLog test
Add a new test that defaults to ActErrno, allows the syscalls needed to carry out a basic test, and sets the getpid() syscall to ActLog. The getpid() syscall is called before the filter is loaded and once again after the filter is loaded. The test is successful if the return values match. The test is skipped when libseccomp is not new enough to support API level operations or the API level is less than 3. Signed-off-by: Tyler Hicks <[email protected]> Signed-off-by: Matthew Heon <[email protected]>
1 parent 798ec96 commit 0353a0b

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

seccomp_test.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -596,3 +596,75 @@ func TestRuleAddAndLoad(t *testing.T) {
596596
t.Errorf("Syscall returned incorrect error code - likely not blocked by Seccomp!")
597597
}
598598
}
599+
600+
func TestLogAct(t *testing.T) {
601+
expectedPid := syscall.Getpid()
602+
603+
api, err := GetApi()
604+
if err != nil {
605+
if !ApiLevelIsSupported() {
606+
t.Skipf("Skipping test: %s", err)
607+
}
608+
609+
t.Errorf("Error getting API level: %s", err)
610+
} else if api < 3 {
611+
t.Skipf("Skipping test: API level %d is less than 3", api)
612+
}
613+
614+
filter, err := NewFilter(ActErrno.SetReturnCode(0x0001))
615+
if err != nil {
616+
t.Errorf("Error creating filter: %s", err)
617+
}
618+
defer filter.Release()
619+
620+
call, err := GetSyscallFromName("getpid")
621+
if err != nil {
622+
t.Errorf("Error getting syscall number of getpid: %s", err)
623+
}
624+
625+
call1, err := GetSyscallFromName("write")
626+
if err != nil {
627+
t.Errorf("Error getting syscall number of write: %s", err)
628+
}
629+
630+
call2, err := GetSyscallFromName("futex")
631+
if err != nil {
632+
t.Errorf("Error getting syscall number of futex: %s", err)
633+
}
634+
635+
call3, err := GetSyscallFromName("exit_group")
636+
if err != nil {
637+
t.Errorf("Error getting syscall number of exit_group: %s", err)
638+
}
639+
640+
err = filter.AddRule(call, ActLog)
641+
if err != nil {
642+
t.Errorf("Error adding rule to log syscall: %s", err)
643+
}
644+
645+
err = filter.AddRule(call1, ActAllow)
646+
if err != nil {
647+
t.Errorf("Error adding rule to allow write syscall: %s", err)
648+
}
649+
650+
err = filter.AddRule(call2, ActAllow)
651+
if err != nil {
652+
t.Errorf("Error adding rule to allow futex syscall: %s", err)
653+
}
654+
655+
err = filter.AddRule(call3, ActAllow)
656+
if err != nil {
657+
t.Errorf("Error adding rule to allow exit_group syscall: %s", err)
658+
}
659+
660+
err = filter.Load()
661+
if err != nil {
662+
t.Errorf("Error loading filter: %s", err)
663+
}
664+
665+
// Try making a simple syscall, it should succeed
666+
pid := syscall.Getpid()
667+
if pid != expectedPid {
668+
t.Errorf("Syscall should have returned expected pid (%d != %d)", pid, expectedPid)
669+
}
670+
}

0 commit comments

Comments
 (0)