diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2025-07-25 15:32:54 +0200 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2025-07-29 09:54:26 +0000 |
| commit | d052a4c8ea018bce39f2ffeed6ce214d78c4381b (patch) | |
| tree | 23b63f2120fcc85ee784fa329d619a1d4d6ebb00 /pkg/manager/repro.go | |
| parent | b14118bbe9ad644f8e16279255fed61d399b96fa (diff) | |
pkg/manager: do a full reproduction for patched-only bugs
After ensuring that a bug only affects the patched kernel, do one more
round of reproduction and (if successful) re-report the result.
This will ensure that, provided enough time, diff fuzzing results will
also have minimalistic C reproducers.
Diffstat (limited to 'pkg/manager/repro.go')
| -rw-r--r-- | pkg/manager/repro.go | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/pkg/manager/repro.go b/pkg/manager/repro.go index 28b676752..e7034b186 100644 --- a/pkg/manager/repro.go +++ b/pkg/manager/repro.go @@ -29,18 +29,23 @@ type Crash struct { FromHub bool // this crash was created based on a repro from syz-hub FromDashboard bool // .. or from dashboard Manual bool + FullRepro bool // used by the diff fuzzer to do a full scale reproduction *report.Report } func (c *Crash) FullTitle() string { + suffix := "" + if c.FullRepro { + suffix = " (full)" + } if c.Report.Title != "" { - return c.Report.Title + return c.Report.Title + suffix } // Just use some unique, but stable titles. if c.FromDashboard { - return fmt.Sprintf("dashboard crash %p", c) + return fmt.Sprintf("dashboard crash %p%s", c, suffix) } else if c.FromHub { - return fmt.Sprintf("crash from hub %p", c) + return fmt.Sprintf("crash from hub %p%s", c, suffix) } panic("the crash is expected to have a report") } @@ -139,6 +144,10 @@ func (r *ReproLoop) popCrash() *Crash { defer r.mu.Unlock() newBetter := func(base, new *Crash) bool { + // If diff fuzzed has requested a full reproduction, do it first. + if base.FullRepro != new.FullRepro { + return new.FullRepro + } // The more times we failed, the less likely we are to actually // find a reproducer. Give preference to not yet attempted repro runs. baseTitle, newTitle := base.FullTitle(), new.FullTitle() |
