aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2024-05-16 18:44:38 +0200
committerAleksandr Nogikh <nogikh@google.com>2024-05-17 09:06:22 +0000
commit4130c191205001026ed3fa4ebae0f5253bbe4f04 (patch)
tree2fe8d3b907e3bd67a84b70c1507fa6996aa41fed
parent85854296002462bd58e6e505eeb97f6e32c9d54c (diff)
syz-manager: handle failed requests
If syz-fuzzer has not been able to execute the request, set the proper result status. Assign fallback signal only if signal was requested and if the execution was successful.
-rw-r--r--syz-manager/rpc.go22
1 files changed, 12 insertions, 10 deletions
diff --git a/syz-manager/rpc.go b/syz-manager/rpc.go
index 8c5e67e34..8843973a2 100644
--- a/syz-manager/rpc.go
+++ b/syz-manager/rpc.go
@@ -521,9 +521,6 @@ func (serv *RPCServer) doneRequest(runner *Runner, resp rpctype.ExecutionResult)
if req.try < resp.Try {
runner.logProgram(resp.ProcID, req.serialized)
}
- if !serv.cfg.Cover {
- addFallbackSignal(req.req.Prog, info)
- }
for i := 0; i < len(info.Calls); i++ {
call := &info.Calls[i]
call.Cover = runner.instModules.Canonicalize(call.Cover)
@@ -531,15 +528,20 @@ func (serv *RPCServer) doneRequest(runner *Runner, resp rpctype.ExecutionResult)
}
info.Extra.Cover = runner.instModules.Canonicalize(info.Extra.Cover)
info.Extra.Signal = runner.instModules.Canonicalize(info.Extra.Signal)
- var err error
- if resp.Error != "" {
- err = fmt.Errorf("%s", resp.Error)
- }
- req.req.Done(&queue.Result{
+
+ result := &queue.Result{
+ Status: queue.Success,
Info: info,
Output: resp.Output,
- Err: err,
- })
+ }
+ if resp.Error != "" {
+ result.Status = queue.ExecFailure
+ result.Err = fmt.Errorf("%s", resp.Error)
+ } else if !serv.cfg.Cover && req.req.ExecOpts.ExecFlags&flatrpc.ExecFlagCollectCover > 0 {
+ // Coverage collection is disabled, but signal was requested => use a substitute signal.
+ addFallbackSignal(req.req.Prog, info)
+ }
+ req.req.Done(result)
}
func (serv *RPCServer) newRequest(runner *Runner, req *queue.Request) (rpctype.ExecutionRequest, bool) {