From d052a4c8ea018bce39f2ffeed6ce214d78c4381b Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Fri, 25 Jul 2025 15:32:54 +0200 Subject: 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. --- pkg/manager/repro.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'pkg/manager/repro.go') 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() -- cgit mrf-deployment