aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2024-07-01 14:26:05 +0200
committerDmitry Vyukov <dvyukov@google.com>2024-07-02 08:23:18 +0000
commit9e5bd0be6b4daaf4593959c6c1a3708cfc1d0969 (patch)
tree124f1de3d139a28490fc933676718ad8c0ef1f8d
parentb01b098ace00ac799e10c38d3d3f1db50437eb57 (diff)
pkg/mgrconfig: allow to disable remote coverage and coverage edges
-rw-r--r--executor/executor.cc16
-rw-r--r--pkg/mgrconfig/config.go6
-rw-r--r--pkg/mgrconfig/load.go4
-rw-r--r--pkg/rpcserver/rpcserver.go8
4 files changed, 25 insertions, 9 deletions
diff --git a/executor/executor.cc b/executor/executor.cc
index fb5d242de..862b0776e 100644
--- a/executor/executor.cc
+++ b/executor/executor.cc
@@ -990,13 +990,15 @@ void execute_one()
#endif
write_extra_output();
- // Check for new extra coverage in small intervals to avoid situation
- // that we were killed on timeout before we write any.
- // Check for extra coverage is very cheap, effectively a memory load.
- const uint64 kSleepMs = 100;
- for (uint64 i = 0; i < prog_extra_cover_timeout / kSleepMs; i++) {
- sleep_ms(kSleepMs);
- write_extra_output();
+ if (flag_extra_coverage) {
+ // Check for new extra coverage in small intervals to avoid situation
+ // that we were killed on timeout before we write any.
+ // Check for extra coverage is very cheap, effectively a memory load.
+ const uint64 kSleepMs = 100;
+ for (uint64 i = 0; i < prog_extra_cover_timeout / kSleepMs; i++) {
+ sleep_ms(kSleepMs);
+ write_extra_output();
+ }
}
}
diff --git a/pkg/mgrconfig/config.go b/pkg/mgrconfig/config.go
index 461d25afb..5b383249a 100644
--- a/pkg/mgrconfig/config.go
+++ b/pkg/mgrconfig/config.go
@@ -217,6 +217,12 @@ type Experimental struct {
// Don't let the VM state accumulate too much by restarting
// syz-executor before most prog executions.
ResetAccState bool `json:"reset_acc_state"`
+
+ // Use KCOV remote coverage feature (default: true).
+ RemoteCover bool `json:"remote_cover"`
+
+ // Hash adjacent PCs to form fuzzing feedback signal, otherwise use PCs as signal (default: true).
+ CoverEdges bool `json:"cover_edges"`
}
type Subsystem struct {
diff --git a/pkg/mgrconfig/load.go b/pkg/mgrconfig/load.go
index ba446ffa3..05ba38a98 100644
--- a/pkg/mgrconfig/load.go
+++ b/pkg/mgrconfig/load.go
@@ -90,6 +90,10 @@ func defaultValues() *Config {
MaxCrashLogs: 100,
Procs: 6,
PreserveCorpus: true,
+ Experimental: Experimental{
+ RemoteCover: true,
+ CoverEdges: true,
+ },
}
}
diff --git a/pkg/rpcserver/rpcserver.go b/pkg/rpcserver/rpcserver.go
index cdeb6f40b..58ef2d363 100644
--- a/pkg/rpcserver/rpcserver.go
+++ b/pkg/rpcserver/rpcserver.go
@@ -85,10 +85,14 @@ func New(cfg *mgrconfig.Config, mgr Manager, debug bool) (*Server, error) {
if err != nil {
return nil, err
}
+ features := flatrpc.AllFeatures
+ if !cfg.Experimental.RemoteCover {
+ features &= ^flatrpc.FeatureExtraCoverage
+ }
return newImpl(&Config{
Config: vminfo.Config{
Target: cfg.Target,
- Features: flatrpc.AllFeatures,
+ Features: features,
Syscalls: cfg.Syscalls,
Debug: debug,
Cover: cfg.Cover,
@@ -99,7 +103,7 @@ func New(cfg *mgrconfig.Config, mgr Manager, debug bool) (*Server, error) {
RPC: cfg.RPC,
VMLess: cfg.VMLess,
// gVisor coverage is not a trace, so producing edges won't work.
- UseCoverEdges: cfg.Type != targets.GVisor,
+ UseCoverEdges: cfg.Experimental.CoverEdges && cfg.Type != targets.GVisor,
// gVisor/Starnix are not Linux, so filtering against Linux ranges won't work.
FilterSignal: cfg.Type != targets.GVisor && cfg.Type != targets.Starnix,
PrintMachineCheck: true,