// Copyright 2015 syzkaller project authors. All rights reserved. // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. // +build linux package host import ( "runtime" "syscall" "testing" "github.com/google/syzkaller/prog" ) func TestSupportedSyscalls(t *testing.T) { t.Parallel() target, err := prog.GetTarget("linux", runtime.GOARCH) if err != nil { t.Fatal(err) } supp, _, err := DetectSupportedSyscalls(target, "none") if err != nil { t.Skipf("skipping: %v", err) } // These are safe to execute with invalid arguments. safe := []string{ "memfd_create", "sendfile", "bpf$MAP_CREATE", "open", "openat", "read", "write", "stat", } for _, name := range safe { c := target.SyscallMap[name] if c == nil { t.Fatalf("can't find syscall '%v'", name) } a := ^uintptr(0) - 4097 // hopefully invalid _, _, err := syscall.Syscall6(uintptr(c.NR), a, a, a, a, a, a) if err == 0 { t.Fatalf("%v did not fail", name) } if ok := err != syscall.ENOSYS; ok != supp[c] { t.Fatalf("syscall %v: perse=%v kallsyms=%v", name, ok, supp[c]) } } }