Skip to content

Commit 5137239

Browse files
committed
pkg/manager: improve error accounting during diff fuzzing
When running the reproducer from the patched kernel on the base kernel, stay on the safe side when encountering errors and context cancellations. Always demand 3 successful executions before declaring a bug patched-only.
1 parent d6b2ee5 commit 5137239

File tree

1 file changed

+21
-11
lines changed

1 file changed

+21
-11
lines changed

pkg/manager/diff.go

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -585,15 +585,21 @@ func (rr *reproRunner) Run(ctx context.Context, r *repro.Result) {
585585
ret := reproRunnerResult{origReport: r.Report, repro: r}
586586

587587
var result *instance.RunResult
588-
var err error
589-
for i := 0; i < 3; i++ {
588+
var doneRuns int
589+
590+
for doneRuns < 3 {
591+
if ctx.Err() != nil {
592+
return
593+
}
594+
590595
opts := r.Opts
591596
opts.Repeat = true
592-
if i == 0 || i == 1 {
597+
if doneRuns < 2 {
593598
// Two times out of 3, test with Threaded=true.
594599
// The third time we leave it as is in case it was important.
595600
opts.Threaded = true
596601
}
602+
var err error
597603
runErr := pool.Run(ctx, func(ctx context.Context, inst *vm.Instance, updInfo dispatcher.UpdateInfo) {
598604
var ret *instance.ExecProgInstance
599605
ret, err = instance.SetupExecProg(inst, rr.kernel.cfg, rr.kernel.reporter, nil)
@@ -606,20 +612,24 @@ func (rr *reproRunner) Run(ctx context.Context, r *repro.Result) {
606612
Opts: opts,
607613
})
608614
})
615+
logPrefix := fmt.Sprintf("attempt #%d to run %q on base", doneRuns, ret.origReport.Title)
609616
if errors.Is(runErr, context.Canceled) {
610-
break
617+
// Just exit without returning anything on the channel.
618+
log.Logf(1, "%s: aborting due to context cancelation", logPrefix)
619+
return
620+
} else if runErr != nil || err != nil {
621+
log.Logf(1, "%s: skipping due to errors: %v / %v", logPrefix, runErr, err)
622+
continue
611623
}
612-
crashed := result != nil && result.Report != nil
613-
log.Logf(1, "attempt #%d to run %q on base: crashed=%v", i, ret.origReport.Title, crashed)
614-
if crashed {
624+
doneRuns++
625+
if result != nil && result.Report != nil {
626+
log.Logf(1, "%s: crashed with %s", logPrefix, result.Report.Title)
615627
ret.crashReport = result.Report
616628
break
629+
} else {
630+
log.Logf(1, "%s: did not crash", logPrefix)
617631
}
618632
}
619-
if err != nil {
620-
log.Errorf("failed to run repro: %v", err)
621-
return
622-
}
623633
select {
624634
case rr.done <- ret:
625635
case <-ctx.Done():

0 commit comments

Comments
 (0)