aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/bisect
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2020-10-17 20:00:45 +0200
committerDmitry Vyukov <dvyukov@google.com>2020-10-21 10:22:10 +0200
commit8f58e4babeecd6606f4c9729919cc85c470bc422 (patch)
tree9f5f837f11cbed4f0ee05b5b666be3effa9e6aaa /pkg/bisect
parentd6322b17cd4d9d62ddbe2b6352d8bab39eefdacb (diff)
pkg/bisect: switch to kconfig.Minimize
Use the new kconfig.Minimize for config minization instead of the config-bisect.pl script. This is mostly just deleting code. Also update tests: - minimization is now supposed to test the baseline config (update "testos" stub accordingly) - minimization is not supposed to return a config that does not build (a reasonable config minimization procedure can't arrive to such config), remove test that tests this Update #2171
Diffstat (limited to 'pkg/bisect')
-rw-r--r--pkg/bisect/bisect.go45
-rw-r--r--pkg/bisect/bisect_test.go11
2 files changed, 9 insertions, 47 deletions
diff --git a/pkg/bisect/bisect.go b/pkg/bisect/bisect.go
index 75b6450d8..9360bbab1 100644
--- a/pkg/bisect/bisect.go
+++ b/pkg/bisect/bisect.go
@@ -4,13 +4,13 @@
package bisect
import (
- "bytes"
"fmt"
"io"
"path/filepath"
"time"
"github.com/google/syzkaller/pkg/build"
+ "github.com/google/syzkaller/pkg/hash"
"github.com/google/syzkaller/pkg/instance"
"github.com/google/syzkaller/pkg/mgrconfig"
"github.com/google/syzkaller/pkg/osutil"
@@ -287,53 +287,24 @@ func (env *env) bisect() (*Result, error) {
}
func (env *env) minimizeConfig() (*testResult, error) {
- cfg := env.cfg
- // Check if crash reproduces with baseline config.
- env.kernelConfig = cfg.Kernel.BaselineConfig
- testRes, err := env.test()
- if err != nil {
- env.log("testing baseline config failed: %v", err)
- env.kernelConfig = cfg.Kernel.Config
- return nil, err
- }
- if testRes.verdict == vcs.BisectBad {
- env.log("crash reproduces with baseline config")
- return testRes, nil
- }
- if testRes.verdict == vcs.BisectSkip {
- env.log("unable to test using baseline config, keep original config")
- env.kernelConfig = cfg.Kernel.Config
- return nil, nil
- }
+ // Find minimal configuration based on baseline to reproduce the crash.
+ testResults := make(map[hash.Sig]*testResult)
predMinimize := func(test []byte) (vcs.BisectResult, error) {
env.kernelConfig = test
testRes, err := env.test()
if err != nil {
return 0, err
}
+ testResults[hash.Hash(test)] = testRes
return testRes.verdict, err
}
- // Find minimal configuration based on baseline to reproduce the crash.
- env.kernelConfig, err = env.minimizer.Minimize(cfg.Kernel.Config,
- cfg.Kernel.BaselineConfig, cfg.Trace, predMinimize)
+ minConfig, err := env.minimizer.Minimize(env.cfg.Kernel.Config,
+ env.cfg.Kernel.BaselineConfig, env.cfg.Trace, predMinimize)
if err != nil {
- env.log("minimizing config failed: %v", err)
return nil, err
}
- if bytes.Equal(env.kernelConfig, cfg.Kernel.Config) {
- return nil, nil
- }
- // Check that crash is really reproduced with generated config.
- testRes, err = env.test()
- if err != nil {
- return nil, fmt.Errorf("testing generated minimized config failed: %v", err)
- }
- if testRes.verdict != vcs.BisectBad {
- env.log("testing with generated minimized config doesn't reproduce the crash")
- env.kernelConfig = cfg.Kernel.Config
- return nil, nil
- }
- return testRes, nil
+ env.kernelConfig = minConfig
+ return testResults[hash.Hash(minConfig)], nil
}
func (env *env) detectNoopChange(results map[string]*testResult, com *vcs.Commit) (bool, error) {
diff --git a/pkg/bisect/bisect_test.go b/pkg/bisect/bisect_test.go
index 3bbc2e2ea..c21548a4d 100644
--- a/pkg/bisect/bisect_test.go
+++ b/pkg/bisect/bisect_test.go
@@ -41,7 +41,7 @@ func (env *testEnv) BuildKernel(compilerBin, cCache, userspaceDir, cmdlineFile,
kernelSign = "same-sign-" + configHash
}
env.config = string(kernelConfig)
- if env.config == "baseline-fails" || env.config == "broken-build" {
+ if env.config == "baseline-fails" {
return "", kernelSign, fmt.Errorf("failure")
}
return "", kernelSign, nil
@@ -185,15 +185,6 @@ var bisectionTests = []BisectionTest{
resultingConfig: "baseline-repro",
},
{
- name: "cause-finds-cause-baseline-broken-build",
- startCommit: 905,
- commitLen: 1,
- expectRep: true,
- culprit: 602,
- baselineConfig: "baseline-broken-build",
- resultingConfig: "original config",
- },
- {
name: "cause-finds-cause-baseline-does-not-repro",
startCommit: 905,
commitLen: 1,