aboutsummaryrefslogtreecommitdiffstats
path: root/syz-manager
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2025-08-21 11:35:15 +0200
committerTaras Madan <tarasmadan@google.com>2025-08-28 11:36:44 +0000
commit6c8b90a1abc330c4e05307ddb268b084a02cd2a3 (patch)
tree0aeeab06948096b0a8b6c60495e3a4dba4291258 /syz-manager
parent443c11c765c0bf86d91595bf5edd50af4476fdc6 (diff)
vm: extract all the crashes from the log
Diffstat (limited to 'syz-manager')
-rw-r--r--syz-manager/manager.go20
1 files changed, 14 insertions, 6 deletions
diff --git a/syz-manager/manager.go b/syz-manager/manager.go
index 177cd5f01..6446275f4 100644
--- a/syz-manager/manager.go
+++ b/syz-manager/manager.go
@@ -597,7 +597,7 @@ func (mgr *Manager) fuzzerInstance(ctx context.Context, inst *vm.Instance, updIn
injectExec := make(chan bool, 10)
serv.CreateInstance(inst.Index(), injectExec, updInfo)
- rep, vmInfo, err := mgr.runInstanceInner(ctx, inst,
+ reps, vmInfo, err := mgr.runInstanceInner(ctx, inst,
vm.WithExitCondition(vm.ExitTimeout),
vm.WithInjectExecuting(injectExec),
vm.WithEarlyFinishCb(func() {
@@ -607,6 +607,10 @@ func (mgr *Manager) fuzzerInstance(ctx context.Context, inst *vm.Instance, updIn
serv.StopFuzzing(inst.Index())
}))
var extraExecs []report.ExecutorInfo
+ var rep *report.Report
+ if len(reps) != 0 {
+ rep = reps[0]
+ }
if rep != nil && rep.Executor != nil {
extraExecs = []report.ExecutorInfo{*rep.Executor}
}
@@ -622,6 +626,7 @@ func (mgr *Manager) fuzzerInstance(ctx context.Context, inst *vm.Instance, updIn
mgr.crashes <- &manager.Crash{
InstanceIndex: inst.Index(),
Report: rep,
+ TailReports: reps[1:],
}
}
if err != nil {
@@ -630,7 +635,7 @@ func (mgr *Manager) fuzzerInstance(ctx context.Context, inst *vm.Instance, updIn
}
func (mgr *Manager) runInstanceInner(ctx context.Context, inst *vm.Instance, opts ...func(*vm.RunOptions),
-) (*report.Report, []byte, error) {
+) ([]*report.Report, []byte, error) {
fwdAddr, err := inst.Forward(mgr.serv.Port())
if err != nil {
return nil, nil, fmt.Errorf("failed to setup port forwarding: %w", err)
@@ -656,11 +661,11 @@ func (mgr *Manager) runInstanceInner(ctx context.Context, inst *vm.Instance, opt
cmd := fmt.Sprintf("%v runner %v %v %v", executorBin, inst.Index(), host, port)
ctxTimeout, cancel := context.WithTimeout(ctx, mgr.cfg.Timeouts.VMRunningTime)
defer cancel()
- _, rep, err := inst.Run(ctxTimeout, mgr.reporter, cmd, opts...)
+ _, reps, err := inst.Run(ctxTimeout, mgr.reporter, cmd, opts...)
if err != nil {
return nil, nil, fmt.Errorf("failed to run fuzzer: %w", err)
}
- if rep == nil {
+ if len(reps) == 0 {
// This is the only "OK" outcome.
log.Logf(0, "VM %v: running for %v, restarting", inst.Index(), time.Since(start))
return nil, nil, nil
@@ -669,7 +674,7 @@ func (mgr *Manager) runInstanceInner(ctx context.Context, inst *vm.Instance, opt
if err != nil {
vmInfo = []byte(fmt.Sprintf("error getting VM info: %v\n", err))
}
- return rep, vmInfo, nil
+ return reps, vmInfo, nil
}
func (mgr *Manager) emailCrash(crash *manager.Crash) {
@@ -708,7 +713,10 @@ func (mgr *Manager) saveCrash(crash *manager.Crash) bool {
if crash.Suppressed {
flags += " [suppressed]"
}
- log.Logf(0, "VM %v: crash: %v%v", crash.InstanceIndex, crash.Title, flags)
+ log.Logf(0, "VM %v: crash: %v%v", crash.InstanceIndex, crash.Report.Title, flags)
+ for i, report := range crash.TailReports {
+ log.Logf(0, "VM %v: crash(tail%d): %v%v", crash.InstanceIndex, i, report.Title, flags)
+ }
if mgr.mode.FailOnCrashes {
path := filepath.Join(mgr.cfg.Workdir, "report.json")