aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pkg/bisect/bisect.go6
-rw-r--r--pkg/vcs/linux.go9
2 files changed, 12 insertions, 3 deletions
diff --git a/pkg/bisect/bisect.go b/pkg/bisect/bisect.go
index 270668e05..b75b2d2e0 100644
--- a/pkg/bisect/bisect.go
+++ b/pkg/bisect/bisect.go
@@ -416,7 +416,11 @@ func (env *env) minimizeConfig() (*testResult, error) {
minConfig, err := env.minimizer.Minimize(env.cfg.Manager.SysTarget, env.cfg.Kernel.Config,
env.cfg.Kernel.BaselineConfig, env.reportTypes, env.cfg.Trace, predMinimize)
if err != nil {
- return nil, err
+ if errors.Is(err, vcs.ErrBadKconfig) {
+ env.log("config minimization failed due to bad Kconfig %v\nproceeding with the original config", err)
+ } else {
+ return nil, err
+ }
}
env.kernelConfig = minConfig
return testResults[hash.Hash(minConfig)], nil
diff --git a/pkg/vcs/linux.go b/pkg/vcs/linux.go
index 98ae07cda..d5a4d138c 100644
--- a/pkg/vcs/linux.go
+++ b/pkg/vcs/linux.go
@@ -5,6 +5,7 @@ package vcs
import (
"bytes"
+ "errors"
"fmt"
"net/mail"
"path/filepath"
@@ -274,6 +275,8 @@ func ParseMaintainersLinux(text []byte) Recipients {
return mtrs
}
+var ErrBadKconfig = errors.New("failed to parse Kconfig")
+
const configBisectTag = "# Minimized by syzkaller"
// Minimize() attempts to drop Linux kernel configs that are unnecessary(*) for bug reproduction.
@@ -289,7 +292,7 @@ func (ctx *linux) Minimize(target *targets.Target, original, baseline []byte, ty
}
kconf, err := kconfig.Parse(target, filepath.Join(ctx.git.dir, "Kconfig"))
if err != nil {
- return nil, fmt.Errorf("failed to parse Kconfig: %w", err)
+ return nil, fmt.Errorf("%w: %w", ErrBadKconfig, err)
}
config, err := kconfig.ParseConfigData(original, "original")
if err != nil {
@@ -324,8 +327,10 @@ func (ctx *linux) Minimize(target *targets.Target, original, baseline []byte, ty
}
if len(baseline) > 0 {
baselineConfig, err := kconfig.ParseConfigData(baseline, "baseline")
+ // If we fail to parse the baseline config proceed with original one as baseline config
+ // is an optional parameter.
if err != nil {
- return nil, err
+ return nil, fmt.Errorf("%w: %w", ErrBadKconfig, err)
}
err = minimizeCtx.minimizeAgainst(baselineConfig)
if err != nil {