From 4130c191205001026ed3fa4ebae0f5253bbe4f04 Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Thu, 16 May 2024 18:44:38 +0200 Subject: 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. --- syz-manager/rpc.go | 22 ++++++++++++---------- 1 file 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) { -- cgit mrf-deployment