aboutsummaryrefslogtreecommitdiffstats
path: root/prog
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2019-04-23 18:59:49 +0300
committerDmitry Vyukov <dvyukov@google.com>2019-04-23 18:59:49 +0300
commit335cf4f4fda02dfadd5bb2d334a88fc2823f248e (patch)
tree5d9d93a36f435ba86377116d6182af45b276cb0f /prog
parent51fc038380062aec71b4e39af9227c6db0be4fd8 (diff)
prog: fix crash in createResource
We may be in createResource but have no resources at all because of ANYRES that are not in target.Resources. This is actually the case for some test targets. We have resources there, but syscalls that create them are disabled. In such case we crash in Intn(0). Check that we have some resources before calling Intn.
Diffstat (limited to 'prog')
-rw-r--r--prog/rand.go7
1 files changed, 6 insertions, 1 deletions
diff --git a/prog/rand.go b/prog/rand.go
index c1ac76776..e4164b74a 100644
--- a/prog/rand.go
+++ b/prog/rand.go
@@ -265,7 +265,8 @@ func (r *randGen) createResource(s *state, res *ResourceType) (arg Arg, calls []
defer func() { r.inCreateResource = false }()
kind := res.Desc.Name
- if r.oneOf(1000) {
+ // We may have no resources, but still be in createResource due to ANYRES.
+ if len(r.target.resourceMap) != 0 && r.oneOf(1000) {
// Spoof resource subkind.
var all []string
for kind1 := range r.target.resourceMap {
@@ -273,6 +274,10 @@ func (r *randGen) createResource(s *state, res *ResourceType) (arg Arg, calls []
all = append(all, kind1)
}
}
+ if len(all) == 0 {
+ panic(fmt.Sprintf("got no spoof resources for %v in %v/%v",
+ kind, r.target.OS, r.target.Arch))
+ }
sort.Strings(all)
kind = all[r.Intn(len(all))]
}