aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/rpcserver/runner.go
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2024-09-09 14:58:09 +0200
committerAleksandr Nogikh <nogikh@google.com>2024-09-10 07:48:30 +0000
commit2ee7713dc5bbcc1972f75a1083a7e4d777c45f63 (patch)
tree30f2cd74df248d6a914df1d99e01fa457a02fd59 /pkg/rpcserver/runner.go
parentf8059e89cd5e73f80a7afa159736c7f230d8aed7 (diff)
pkg/rpcserver, syz-manager: always include the program from Comm
It does sometimes happen that the kernel is crashed so fast that syz-manager is not notified that the syz-executor has started running the faulty input. In cases when the exact program is known from Comm, let's make sure it's always present in the log of the last executed programs.
Diffstat (limited to 'pkg/rpcserver/runner.go')
-rw-r--r--pkg/rpcserver/runner.go17
1 files changed, 15 insertions, 2 deletions
diff --git a/pkg/rpcserver/runner.go b/pkg/rpcserver/runner.go
index 6100c94f7..45b376a79 100644
--- a/pkg/rpcserver/runner.go
+++ b/pkg/rpcserver/runner.go
@@ -17,6 +17,7 @@ import (
"github.com/google/syzkaller/pkg/fuzzer/queue"
"github.com/google/syzkaller/pkg/log"
"github.com/google/syzkaller/pkg/osutil"
+ "github.com/google/syzkaller/pkg/report"
"github.com/google/syzkaller/pkg/stat"
"github.com/google/syzkaller/prog"
"github.com/google/syzkaller/sys/targets"
@@ -507,7 +508,7 @@ func (runner *Runner) Stop() {
}
}
-func (runner *Runner) Shutdown(crashed bool) []ExecRecord {
+func (runner *Runner) Shutdown(crashed bool, extraExecs ...report.ExecutorInfo) []ExecRecord {
runner.mu.Lock()
runner.stopped = true
finished := runner.finished
@@ -517,6 +518,18 @@ func (runner *Runner) Shutdown(crashed bool) []ExecRecord {
// Wait for the connection goroutine to finish and stop touching data.
<-finished
}
+ records := runner.lastExec.Collect()
+ for _, info := range extraExecs {
+ req := runner.requests[int64(info.ExecID)]
+ // If the request is in executing, it's also already in the records slice.
+ if req != nil && !runner.executing[int64(info.ExecID)] {
+ records = append(records, ExecRecord{
+ ID: info.ExecID,
+ Proc: info.ProcID,
+ Prog: req.Prog.Serialize(),
+ })
+ }
+ }
for id, req := range runner.requests {
status := queue.Restarted
if crashed && runner.executing[id] {
@@ -524,7 +537,7 @@ func (runner *Runner) Shutdown(crashed bool) []ExecRecord {
}
req.Done(&queue.Result{Status: status})
}
- return runner.lastExec.Collect()
+ return records
}
func (runner *Runner) MachineInfo() []byte {