aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/manager/repro.go
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2025-07-25 15:32:54 +0200
committerAleksandr Nogikh <nogikh@google.com>2025-07-29 09:54:26 +0000
commitd052a4c8ea018bce39f2ffeed6ce214d78c4381b (patch)
tree23b63f2120fcc85ee784fa329d619a1d4d6ebb00 /pkg/manager/repro.go
parentb14118bbe9ad644f8e16279255fed61d399b96fa (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.go15
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()