aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/csource/csource.go
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2021-12-01 17:25:40 +0000
committerAleksandr Nogikh <wp32pw@gmail.com>2021-12-10 12:30:07 +0100
commit18f846ca807cfc6df9c3da3c0ab08251277dfefb (patch)
treee14f783b914409f21ae77a01a6b74ededaba6901 /pkg/csource/csource.go
parent52c8379f77b5f292e2d527c66dfe17a899381d20 (diff)
all: add the `rerun` call property
To be able to collide specific syscalls more precisely, we need to repeat the process many times. Introduce the `rerun` call property, which instructs `syz-executor` to repeat the call the specified number of times. The intended use is: call1() (rerun: 100, async) call2() (rerun: 100) For now, assign rerun values randomly to consecutive pairs of calls, where the first one is async.
Diffstat (limited to 'pkg/csource/csource.go')
-rw-r--r--pkg/csource/csource.go8
1 files changed, 8 insertions, 0 deletions
diff --git a/pkg/csource/csource.go b/pkg/csource/csource.go
index 32e01ff1e..6dd8bdcd6 100644
--- a/pkg/csource/csource.go
+++ b/pkg/csource/csource.go
@@ -253,6 +253,14 @@ func (ctx *context) generateCalls(p prog.ExecProg, trace bool) ([]string, []uint
ctx.emitCall(w, call, ci, resCopyout || argCopyout, trace)
+ if call.Props.Rerun > 0 {
+ // TODO: remove this legacy C89-style definition once we figure out what to do with Akaros.
+ fmt.Fprintf(w, "\t{\n\tint i;\n")
+ fmt.Fprintf(w, "\tfor(i = 0; i < %v; i++) {\n", call.Props.Rerun)
+ // Rerun invocations should not affect the result value.
+ ctx.emitCall(w, call, ci, false, false)
+ fmt.Fprintf(w, "\t\t}\n\t}\n")
+ }
// Copyout.
if resCopyout || argCopyout {
ctx.copyout(w, call, resCopyout)