aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/mgrconfig
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2025-12-30 18:50:25 +0100
committerDmitry Vyukov <dvyukov@google.com>2026-01-02 13:38:49 +0000
commitf1519a95877e13662cbf16c7344b3e23d5b3982c (patch)
tree73f3ff8f753aecddfee46eabe0f2144227adf225 /pkg/mgrconfig
parentaf6b70b9a2c145f9a687e6c4056f035c6d62f2c0 (diff)
prog: support snapshot-only calls
Update #5308
Diffstat (limited to 'pkg/mgrconfig')
-rw-r--r--pkg/mgrconfig/load.go36
1 files changed, 19 insertions, 17 deletions
diff --git a/pkg/mgrconfig/load.go b/pkg/mgrconfig/load.go
index dec412b9d..531dc26d8 100644
--- a/pkg/mgrconfig/load.go
+++ b/pkg/mgrconfig/load.go
@@ -112,21 +112,20 @@ func DefaultValues() *Config {
type DescriptionsMode int
const (
- invalidDescriptions = iota
- ManualDescriptions
+ ManualDescriptions = 1 << iota
AutoDescriptions
- AnyDescriptions
+ SnapshotDescriptions
+
+ AnyDescriptions = ManualDescriptions | AutoDescriptions
)
const manualDescriptions = "manual"
-var (
- strToDescriptionsMode = map[string]DescriptionsMode{
- manualDescriptions: ManualDescriptions,
- "auto": AutoDescriptions,
- "any": AnyDescriptions,
- }
-)
+var strToDescriptionsMode = map[string]DescriptionsMode{
+ manualDescriptions: ManualDescriptions,
+ "auto": AutoDescriptions,
+ "any": AnyDescriptions,
+}
func SetTargets(cfg *Config) error {
var err error
@@ -184,9 +183,13 @@ func Complete(cfg *Config) error {
return fmt.Errorf("fuzzing_vms cannot be less than 0")
}
+ descriptionsMode := strToDescriptionsMode[cfg.Experimental.DescriptionsMode]
+ if cfg.Snapshot {
+ descriptionsMode |= SnapshotDescriptions
+ }
var err error
cfg.Syscalls, err = ParseEnabledSyscalls(cfg.Target, cfg.EnabledSyscalls, cfg.DisabledSyscalls,
- strToDescriptionsMode[cfg.Experimental.DescriptionsMode])
+ descriptionsMode)
if err != nil {
return err
}
@@ -419,10 +422,6 @@ func SplitTarget(str string) (os, vmarch, arch string, target *prog.Target, sysT
func ParseEnabledSyscalls(target *prog.Target, enabled, disabled []string,
descriptionsMode DescriptionsMode) ([]int, error) {
- if descriptionsMode == invalidDescriptions {
- return nil, fmt.Errorf("config param descriptions_mode must contain one of auto/manual/any")
- }
-
syscalls := make(map[int]bool)
if len(enabled) != 0 {
for _, c := range enabled {
@@ -439,14 +438,17 @@ func ParseEnabledSyscalls(target *prog.Target, enabled, disabled []string,
}
} else {
for _, call := range target.Syscalls {
+ if call.Attrs.Snapshot && (descriptionsMode&SnapshotDescriptions) == 0 {
+ continue
+ }
syscalls[call.ID] = true
}
}
for call := range syscalls {
if target.Syscalls[call].Attrs.Disabled ||
- descriptionsMode == ManualDescriptions && target.Syscalls[call].Attrs.Automatic ||
- descriptionsMode == AutoDescriptions &&
+ (descriptionsMode&AutoDescriptions) == 0 && target.Syscalls[call].Attrs.Automatic ||
+ (descriptionsMode&ManualDescriptions) == 0 &&
!target.Syscalls[call].Attrs.Automatic && !target.Syscalls[call].Attrs.AutomaticHelper {
delete(syscalls, call)
}