diff options
| author | Veronica Radu <veronicaradu@google.com> | 2019-09-24 16:31:31 +0200 |
|---|---|---|
| committer | Andrey Konovalov <andreyknvl@gmail.com> | 2019-09-24 20:13:37 +0200 |
| commit | e38a6630eb6b89a4b3c344dc62ecb3b60f078028 (patch) | |
| tree | 3912ffcb263c326b2fb6fefb978edfd05cfb1d5d | |
| parent | 38634e3316fa12223ea9988c9a65d778572a20a4 (diff) | |
syz-manager: fix unwanted syscalls that were enabled
Update #1424
| -rw-r--r-- | prog/rand.go | 4 | ||||
| -rw-r--r-- | prog/rand_test.go | 22 |
2 files changed, 25 insertions, 1 deletions
diff --git a/prog/rand.go b/prog/rand.go index f8c640161..1b02dc728 100644 --- a/prog/rand.go +++ b/prog/rand.go @@ -492,8 +492,10 @@ func (r *randGen) nOutOf(n, outOf int) bool { func (r *randGen) generateCall(s *state, p *Prog, insertionPoint int) []*Call { idx := 0 - if s.ct == nil || insertionPoint <= 0 { + if s.ct == nil { idx = r.Intn(len(r.target.Syscalls)) + } else if insertionPoint <= 0 { + idx = s.ct.enabledCalls[r.Intn(len(s.ct.enabledCalls))].ID } else { call := -1 if len(p.Calls) != 0 { diff --git a/prog/rand_test.go b/prog/rand_test.go index 20a305afe..a17d60853 100644 --- a/prog/rand_test.go +++ b/prog/rand_test.go @@ -71,6 +71,28 @@ func generateProg(t *testing.T, target *Target, rs rand.Source) *Prog { return p } +// Checks that a generated program contains only enabled syscalls. +func TestEnabledCalls(t *testing.T) { + target, rs, iters := initTest(t) + enabledCalls := map[string]bool{"open": true, "read": true, "dup3": true, "write": true, "close": true} + enabled := make(map[*Syscall]bool) + for c := range enabledCalls { + enabled[target.SyscallMap[c]] = true + } + ct := target.BuildChoiceTable(nil, enabled) + for i := 0; i < 100; i++ { + p := target.Generate(rs, 50, ct) + for it := 0; it < iters/10; it++ { + p.Mutate(rs, 50, ct, nil) + } + for _, c := range p.Calls { + if _, ok := enabledCalls[c.Meta.Name]; !ok { + t.Fatalf("program contains a syscall that is not enabled: %v\n", c.Meta.Name) + } + } + } +} + func TestSizeGenerateConstArg(t *testing.T) { target, rs, iters := initRandomTargetTest(t, "test", "64") r := newRand(target, rs) |
