From 9e5bd0be6b4daaf4593959c6c1a3708cfc1d0969 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Mon, 1 Jul 2024 14:26:05 +0200 Subject: pkg/mgrconfig: allow to disable remote coverage and coverage edges --- pkg/mgrconfig/config.go | 6 ++++++ pkg/mgrconfig/load.go | 4 ++++ pkg/rpcserver/rpcserver.go | 8 ++++++-- 3 files changed, 16 insertions(+), 2 deletions(-) (limited to 'pkg') 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, -- cgit mrf-deployment