aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--syz-ci/manager.go11
-rw-r--r--syz-ci/syz-ci.go11
2 files changed, 20 insertions, 2 deletions
diff --git a/syz-ci/manager.go b/syz-ci/manager.go
index dfa6940b5..c19c4cb52 100644
--- a/syz-ci/manager.go
+++ b/syz-ci/manager.go
@@ -88,6 +88,7 @@ type Manager struct {
stop chan struct{}
debug bool
lastBuild *dashapi.Build
+ buildFailed bool
}
type ManagerDashapi interface {
@@ -241,6 +242,7 @@ loop:
func (mgr *Manager) pollAndBuild(lastCommit string, latestInfo *BuildInfo) (
string, *BuildInfo, time.Duration) {
+ var success bool
rebuildAfter := buildRetryPeriod
commit, err := mgr.repo.Poll(mgr.mgrcfg.Repo, mgr.mgrcfg.Branch)
if err != nil {
@@ -263,6 +265,8 @@ func (mgr *Manager) pollAndBuild(lastCommit string, latestInfo *BuildInfo) (
latestInfo = mgr.checkLatest()
if latestInfo == nil {
mgr.Errorf("failed to read build info after build")
+ } else {
+ success = true
}
}
buildSem.Signal()
@@ -270,6 +274,7 @@ func (mgr *Manager) pollAndBuild(lastCommit string, latestInfo *BuildInfo) (
}
}
}
+ mgr.buildFailed = !success
return lastCommit, latestInfo, rebuildAfter
}
@@ -410,6 +415,12 @@ func (mgr *Manager) restartManager() {
mgr.Errorf("failed to upload build: %v", err)
return
}
+ daysSinceCommit := time.Since(info.KernelCommitDate).Hours() / 24
+ if mgr.buildFailed && daysSinceCommit > float64(mgr.mgrcfg.MaxKernelLagDays) {
+ mgr.Errorf("the kernel is now too old (%.1f days since last commit), fuzzing is stopped",
+ daysSinceCommit)
+ return
+ }
cfgFile, err := mgr.writeConfig(buildTag)
if err != nil {
mgr.Errorf("failed to create manager config: %v", err)
diff --git a/syz-ci/syz-ci.go b/syz-ci/syz-ci.go
index 138bf2104..ae6ff0f87 100644
--- a/syz-ci/syz-ci.go
+++ b/syz-ci/syz-ci.go
@@ -199,9 +199,13 @@ type ManagerConfig struct {
Jobs ManagerJobs `json:"jobs"`
// Extra commits to cherry pick to older kernel revisions.
BisectBackports []vcs.BackportCommit `json:"bisect_backports"`
-
+ // Base syz-manager config for the instance.
ManagerConfig json.RawMessage `json:"manager_config"`
- managercfg *mgrconfig.Config
+ // If the kernel's commit is older than MaxKernelLagDays days,
+ // fuzzing won't be started on this instance.
+ // By default it's 30 days.
+ MaxKernelLagDays int
+ managercfg *mgrconfig.Config
}
type ManagerJobs struct {
@@ -444,6 +448,9 @@ func loadManagerConfig(cfg *Config, mgr *ManagerConfig) error {
if mgr.KernelConfig != "" && mgr.KernelBaselineConfig == "" {
mgr.KernelBaselineConfig = inferBaselineConfig(mgr.KernelConfig)
}
+ if mgr.MaxKernelLagDays == 0 {
+ mgr.MaxKernelLagDays = 30
+ }
if err := mgr.validate(cfg); err != nil {
return err
}