aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/bisect/bisect.go
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/bisect.go
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/bisect.go')
-rw-r--r--pkg/bisect/bisect.go45
1 files changed, 8 insertions, 37 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) {