aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2019-02-12 18:27:21 +0100
committerDmitry Vyukov <dvyukov@google.com>2019-02-12 18:34:25 +0100
commitbe0e89ec4418a5fb62f775c0209fe01162b727be (patch)
tree531914ec4d6dcd3aeeccf0fdd7dd942e8f9f5c91 /tools
parentf5827293e2e7f5202cfde68b7a20db7f0bd3506a (diff)
tools/syz-stress: add flag to select subset of syscalls
Add -enable flag similar to syz-mutate flag. The flag allows to select a subset of syscalls that will be tested (e.g. -enable=open,read,write,close).
Diffstat (limited to 'tools')
-rw-r--r--tools/syz-stress/stress.go31
1 files changed, 25 insertions, 6 deletions
diff --git a/tools/syz-stress/stress.go b/tools/syz-stress/stress.go
index d1beee34d..c56936377 100644
--- a/tools/syz-stress/stress.go
+++ b/tools/syz-stress/stress.go
@@ -9,6 +9,7 @@ import (
"math/rand"
"os"
"runtime"
+ "strings"
"sync"
"sync/atomic"
"time"
@@ -18,6 +19,7 @@ import (
"github.com/google/syzkaller/pkg/ipc"
"github.com/google/syzkaller/pkg/ipc/ipcconfig"
"github.com/google/syzkaller/pkg/log"
+ "github.com/google/syzkaller/pkg/mgrconfig"
"github.com/google/syzkaller/prog"
_ "github.com/google/syzkaller/sys"
)
@@ -30,6 +32,7 @@ var (
flagProcs = flag.Int("procs", 2*runtime.NumCPU(), "number of parallel processes")
flagLogProg = flag.Bool("logprog", false, "print programs before execution")
flagGenerate = flag.Bool("generate", true, "generate new programs, otherwise only mutate corpus")
+ flagEnable = flag.String("enable", "", "comma-separated list of enabled syscalls")
statExec uint64
gate *ipc.Gate
@@ -57,7 +60,7 @@ func main() {
log.Fatalf("%v", err)
}
- calls := buildCallList(target)
+ calls := buildCallList(target, strings.Split(*flagEnable, ","))
prios := target.CalculatePriorities(corpus)
ct := target.BuildChoiceTable(prios, calls)
@@ -145,7 +148,7 @@ func readCorpus(target *prog.Target) []*prog.Prog {
return progs
}
-func buildCallList(target *prog.Target) map[*prog.Syscall]bool {
+func buildCallList(target *prog.Target, enabled []string) map[*prog.Syscall]bool {
if *flagOS != runtime.GOOS {
// This is currently used on akaros, where syz-stress runs on host.
calls := make(map[*prog.Syscall]bool)
@@ -156,10 +159,26 @@ func buildCallList(target *prog.Target) map[*prog.Syscall]bool {
}
calls, disabled, err := host.DetectSupportedSyscalls(target, "none")
if err != nil {
- log.Logf(0, "failed to detect host supported syscalls: %v", err)
- calls = make(map[*prog.Syscall]bool)
- for _, c := range target.Syscalls {
- calls[c] = true
+ log.Fatalf("failed to detect host supported syscalls: %v", err)
+ }
+ if len(enabled) != 0 {
+ syscallsIDs, err := mgrconfig.ParseEnabledSyscalls(target, enabled, nil)
+ if err != nil {
+ log.Fatalf("failed to parse enabled syscalls: %v", err)
+ }
+ enabledSyscalls := make(map[*prog.Syscall]bool)
+ for _, id := range syscallsIDs {
+ enabledSyscalls[target.Syscalls[id]] = true
+ }
+ for c := range calls {
+ if !enabledSyscalls[c] {
+ delete(calls, c)
+ }
+ }
+ for c := range disabled {
+ if !enabledSyscalls[c] {
+ delete(disabled, c)
+ }
}
}
for c, reason := range disabled {