diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2024-04-15 14:54:59 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2024-04-15 17:57:59 +0000 |
| commit | 0d592ce46ebc504d579c07e5bc3f7f3f2038c4cf (patch) | |
| tree | 8c942e9313a6d4c1e302e6aa55cd853d524f97db /pkg/signal | |
| parent | e634f4672260dac9c086a06bfe10e4e3859c77a1 (diff) | |
pkg/fuzzer: fix signal filtering during minimization
This fixes 2 issues:
1. We still want to get new coverage for syscalls during minimization.
We run lots of new programs, and some of them can give new coverage.
2. The signal filter should apply only to the target syscall.
Other syscalls probably can't even reach any of that code.
So add SignalFilterCall field and combine new and filtered signal
for that call. Other calls just collect new coverage as usual.
Diffstat (limited to 'pkg/signal')
| -rw-r--r-- | pkg/signal/signal.go | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/pkg/signal/signal.go b/pkg/signal/signal.go index 48686de54..10a1ef0cb 100644 --- a/pkg/signal/signal.go +++ b/pkg/signal/signal.go @@ -159,11 +159,14 @@ func (s Signal) RandomSubset(r *rand.Rand, size int) Signal { return ret } -// FilterRaw returns a subset of original raw elements that coincides with the one in Signal. -func (s Signal) FilterRaw(raw []uint32) []uint32 { +// FilterRaw returns a subset of original raw elements that either are not present in ignore, +// or coincides with the one in alwaysTake. +func FilterRaw(raw []uint32, ignore, alwaysTake Signal) []uint32 { var ret []uint32 for _, e := range raw { - if _, ok := s[elemType(e)]; ok { + if _, ok := alwaysTake[elemType(e)]; ok { + ret = append(ret, e) + } else if _, ok := ignore[elemType(e)]; !ok { ret = append(ret, e) } } |
