aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVeronica Radu <veronicaradu@google.com>2019-09-24 16:31:31 +0200
committerAndrey Konovalov <andreyknvl@gmail.com>2019-09-24 20:13:37 +0200
commite38a6630eb6b89a4b3c344dc62ecb3b60f078028 (patch)
tree3912ffcb263c326b2fb6fefb978edfd05cfb1d5d
parent38634e3316fa12223ea9988c9a65d778572a20a4 (diff)
syz-manager: fix unwanted syscalls that were enabled
Update #1424
-rw-r--r--prog/rand.go4
-rw-r--r--prog/rand_test.go22
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)