aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2019-07-23 09:15:43 +0200
committerDmitry Vyukov <dvyukov@google.com>2019-07-23 09:15:43 +0200
commitd9ec038e02b467c11141dc238037ac7413ee6c1f (patch)
tree6876fd8e0fec335c2d893b5bfd19447bd3750690 /pkg
parentb858e6fb5f220b97655fd23bc5f099c42ef4b159 (diff)
pkg/report: refactor argument passing
We now pass 5 arguments through a bunch of functions, this is quite inconvinient when the set of arguments changes. Incapsulate all arguments in a struct and pass/store it as a whole.
Diffstat (limited to 'pkg')
-rw-r--r--pkg/report/akaros.go12
-rw-r--r--pkg/report/freebsd.go13
-rw-r--r--pkg/report/fuchsia.go14
-rw-r--r--pkg/report/gvisor.go9
-rw-r--r--pkg/report/linux.go21
-rw-r--r--pkg/report/netbsd.go28
-rw-r--r--pkg/report/netbsd_test.go12
-rw-r--r--pkg/report/openbsd.go26
-rw-r--r--pkg/report/openbsd_test.go12
-rw-r--r--pkg/report/report.go19
-rw-r--r--pkg/report/stub.go17
11 files changed, 77 insertions, 106 deletions
diff --git a/pkg/report/akaros.go b/pkg/report/akaros.go
index 602bdd829..83f3cf3f4 100644
--- a/pkg/report/akaros.go
+++ b/pkg/report/akaros.go
@@ -13,21 +13,19 @@ import (
"strings"
"github.com/google/syzkaller/pkg/symbolizer"
- "github.com/google/syzkaller/sys/targets"
)
type akaros struct {
- ignores []*regexp.Regexp
+ *config
objfile string
}
-func ctorAkaros(target *targets.Target, kernelSrc, kernelBuildSrc, kernelObj string,
- ignores []*regexp.Regexp) (Reporter, []string, error) {
+func ctorAkaros(cfg *config) (Reporter, []string, error) {
ctx := &akaros{
- ignores: ignores,
+ config: cfg,
}
- if kernelObj != "" {
- ctx.objfile = filepath.Join(kernelObj, target.KernelObject)
+ if ctx.kernelObj != "" {
+ ctx.objfile = filepath.Join(ctx.kernelObj, ctx.target.KernelObject)
}
return ctx, nil, nil
}
diff --git a/pkg/report/freebsd.go b/pkg/report/freebsd.go
index 1ca0b44be..1a6f38205 100644
--- a/pkg/report/freebsd.go
+++ b/pkg/report/freebsd.go
@@ -6,22 +6,15 @@ package report
import (
"bytes"
"regexp"
-
- "github.com/google/syzkaller/sys/targets"
)
type freebsd struct {
- kernelBuildSrc string
- kernelObj string
- ignores []*regexp.Regexp
+ *config
}
-func ctorFreebsd(target *targets.Target, kernelSrc, kernelBuildSrc, kernelObj string,
- ignores []*regexp.Regexp) (Reporter, []string, error) {
+func ctorFreebsd(cfg *config) (Reporter, []string, error) {
ctx := &freebsd{
- kernelBuildSrc: kernelBuildSrc,
- kernelObj: kernelObj,
- ignores: ignores,
+ config: cfg,
}
return ctx, nil, nil
}
diff --git a/pkg/report/fuchsia.go b/pkg/report/fuchsia.go
index b8467d5e1..25facf658 100644
--- a/pkg/report/fuchsia.go
+++ b/pkg/report/fuchsia.go
@@ -13,13 +13,12 @@ import (
"strings"
"github.com/google/syzkaller/pkg/symbolizer"
- "github.com/google/syzkaller/sys/targets"
"github.com/ianlancetaylor/demangle"
)
type fuchsia struct {
- obj string
- ignores []*regexp.Regexp
+ *config
+ obj string
}
var (
@@ -39,13 +38,12 @@ var (
}
)
-func ctorFuchsia(target *targets.Target, kernelSrc, kernelBuildSrc, kernelObj string,
- ignores []*regexp.Regexp) (Reporter, []string, error) {
+func ctorFuchsia(cfg *config) (Reporter, []string, error) {
ctx := &fuchsia{
- ignores: ignores,
+ config: cfg,
}
- if kernelObj != "" {
- ctx.obj = filepath.Join(kernelObj, target.KernelObject)
+ if ctx.kernelObj != "" {
+ ctx.obj = filepath.Join(ctx.kernelObj, ctx.target.KernelObject)
}
suppressions := []string{
"fatal exception: process /tmp/syz-fuzzer", // OOM presumably
diff --git a/pkg/report/gvisor.go b/pkg/report/gvisor.go
index 8e24430c0..480ad24e8 100644
--- a/pkg/report/gvisor.go
+++ b/pkg/report/gvisor.go
@@ -6,18 +6,15 @@ package report
import (
"bytes"
"regexp"
-
- "github.com/google/syzkaller/sys/targets"
)
type gvisor struct {
- ignores []*regexp.Regexp
+ *config
}
-func ctorGvisor(target *targets.Target, kernelSrc, kernelBuildSrc, kernelObj string,
- ignores []*regexp.Regexp) (Reporter, []string, error) {
+func ctorGvisor(cfg *config) (Reporter, []string, error) {
ctx := &gvisor{
- ignores: ignores,
+ config: cfg,
}
suppressions := []string{
"fatal error: runtime: out of memory",
diff --git a/pkg/report/linux.go b/pkg/report/linux.go
index 61f92ef5d..384f3fa5f 100644
--- a/pkg/report/linux.go
+++ b/pkg/report/linux.go
@@ -16,16 +16,12 @@ import (
"github.com/google/syzkaller/pkg/osutil"
"github.com/google/syzkaller/pkg/symbolizer"
- "github.com/google/syzkaller/sys/targets"
)
type linux struct {
- kernelSrc string
- kernelBuildSrc string
- kernelObj string
+ *config
vmlinux string
symbols map[string][]symbolizer.Symbol
- ignores []*regexp.Regexp
consoleOutputRe *regexp.Regexp
questionableRes []*regexp.Regexp
taskContext *regexp.Regexp
@@ -36,11 +32,11 @@ type linux struct {
eoi []byte
}
-func ctorLinux(target *targets.Target, kernelSrc, kernelBuildSrc, kernelObj string, ignores []*regexp.Regexp) (Reporter, []string, error) {
+func ctorLinux(cfg *config) (Reporter, []string, error) {
var symbols map[string][]symbolizer.Symbol
vmlinux := ""
- if kernelObj != "" {
- vmlinux = filepath.Join(kernelObj, target.KernelObject)
+ if cfg.kernelObj != "" {
+ vmlinux = filepath.Join(cfg.kernelObj, cfg.target.KernelObject)
var err error
symbols, err = symbolizer.ReadSymbols(vmlinux)
if err != nil {
@@ -48,12 +44,9 @@ func ctorLinux(target *targets.Target, kernelSrc, kernelBuildSrc, kernelObj stri
}
}
ctx := &linux{
- kernelSrc: kernelSrc,
- kernelBuildSrc: kernelBuildSrc,
- kernelObj: kernelObj,
- vmlinux: vmlinux,
- symbols: symbols,
- ignores: ignores,
+ config: cfg,
+ vmlinux: vmlinux,
+ symbols: symbols,
}
ctx.consoleOutputRe = regexp.MustCompile(`^(?:\*\* [0-9]+ printk messages dropped \*\* )?(?:.* login: )?(?:\<[0-9]+\>)?\[ *[0-9]+\.[0-9]+\](\[ *(?:C|T)[0-9]+\])? `)
ctx.questionableRes = []*regexp.Regexp{
diff --git a/pkg/report/netbsd.go b/pkg/report/netbsd.go
index c716d6df0..45c7c2717 100644
--- a/pkg/report/netbsd.go
+++ b/pkg/report/netbsd.go
@@ -13,16 +13,12 @@ import (
"strings"
"github.com/google/syzkaller/pkg/symbolizer"
- "github.com/google/syzkaller/sys/targets"
)
type netbsd struct {
- kernelSrc string
- kernelBuildSrc string
- kernelObj string
- kernelObject string
- symbols map[string][]symbolizer.Symbol
- ignores []*regexp.Regexp
+ *config
+ kernelObject string
+ symbols map[string][]symbolizer.Symbol
}
var (
@@ -34,13 +30,12 @@ var (
}
)
-func ctorNetbsd(target *targets.Target, kernelSrc, kernelBuildSrc, kernelObj string,
- ignores []*regexp.Regexp) (Reporter, []string, error) {
+func ctorNetbsd(cfg *config) (Reporter, []string, error) {
var symbols map[string][]symbolizer.Symbol
- ignores = append(ignores, regexp.MustCompile("event_init: unable to initialize")) // postfix output
+ cfg.ignores = append(cfg.ignores, regexp.MustCompile("event_init: unable to initialize")) // postfix output
kernelObject := ""
- if kernelObj != "" {
- kernelObject = filepath.Join(kernelObj, target.KernelObject)
+ if cfg.kernelObj != "" {
+ kernelObject = filepath.Join(cfg.kernelObj, cfg.target.KernelObject)
var err error
symbols, err = symbolizer.ReadSymbols(kernelObject)
if err != nil {
@@ -48,12 +43,9 @@ func ctorNetbsd(target *targets.Target, kernelSrc, kernelBuildSrc, kernelObj str
}
}
ctx := &netbsd{
- kernelSrc: kernelSrc,
- kernelBuildSrc: kernelBuildSrc,
- kernelObj: kernelObj,
- kernelObject: kernelObject,
- symbols: symbols,
- ignores: ignores,
+ config: cfg,
+ kernelObject: kernelObject,
+ symbols: symbols,
}
return ctx, nil, nil
}
diff --git a/pkg/report/netbsd_test.go b/pkg/report/netbsd_test.go
index be5e69130..0f4b627db 100644
--- a/pkg/report/netbsd_test.go
+++ b/pkg/report/netbsd_test.go
@@ -82,11 +82,13 @@ func TestNetbsdSymbolizeLine(t *testing.T) {
}
}
nbsd := netbsd{
- kernelSrc: "netbsd/src",
- kernelBuildSrc: "netbsd/src",
- kernelObj: "/netbsd/src/obj/sys/arch/amd64/compile/GENERIC",
- kernelObject: "netbsd.gdb",
- symbols: symbols,
+ config: &config{
+ kernelSrc: "netbsd/src",
+ kernelBuildSrc: "netbsd/src",
+ kernelObj: "/netbsd/src/obj/sys/arch/amd64/compile/GENERIC",
+ },
+ kernelObject: "netbsd.gdb",
+ symbols: symbols,
}
for i, test := range tests {
t.Run(fmt.Sprint(i), func(t *testing.T) {
diff --git a/pkg/report/openbsd.go b/pkg/report/openbsd.go
index 7a0c318a5..0182b344a 100644
--- a/pkg/report/openbsd.go
+++ b/pkg/report/openbsd.go
@@ -13,16 +13,12 @@ import (
"strings"
"github.com/google/syzkaller/pkg/symbolizer"
- "github.com/google/syzkaller/sys/targets"
)
type openbsd struct {
- kernelSrc string
- kernelBuildSrc string
- kernelObj string
- kernelObject string
- symbols map[string][]symbolizer.Symbol
- ignores []*regexp.Regexp
+ *config
+ kernelObject string
+ symbols map[string][]symbolizer.Symbol
}
var (
@@ -34,12 +30,11 @@ var (
}
)
-func ctorOpenbsd(target *targets.Target, kernelSrc, kernelBuildSrc, kernelObj string,
- ignores []*regexp.Regexp) (Reporter, []string, error) {
+func ctorOpenbsd(cfg *config) (Reporter, []string, error) {
var symbols map[string][]symbolizer.Symbol
kernelObject := ""
- if kernelObj != "" {
- kernelObject = filepath.Join(kernelObj, target.KernelObject)
+ if cfg.kernelObj != "" {
+ kernelObject = filepath.Join(cfg.kernelObj, cfg.target.KernelObject)
var err error
symbols, err = symbolizer.ReadSymbols(kernelObject)
if err != nil {
@@ -47,12 +42,9 @@ func ctorOpenbsd(target *targets.Target, kernelSrc, kernelBuildSrc, kernelObj st
}
}
ctx := &openbsd{
- kernelSrc: kernelSrc,
- kernelBuildSrc: kernelBuildSrc,
- kernelObj: kernelObj,
- kernelObject: kernelObject,
- symbols: symbols,
- ignores: ignores,
+ config: cfg,
+ kernelObject: kernelObject,
+ symbols: symbols,
}
return ctx, nil, nil
}
diff --git a/pkg/report/openbsd_test.go b/pkg/report/openbsd_test.go
index a4b3acfb1..8c8e4122f 100644
--- a/pkg/report/openbsd_test.go
+++ b/pkg/report/openbsd_test.go
@@ -82,11 +82,13 @@ func TestOpenbsdSymbolizeLine(t *testing.T) {
}
}
obsd := openbsd{
- kernelSrc: "/usr/src",
- kernelBuildSrc: "/usr/src",
- kernelObj: "/usr/src/sys/arch/amd64/compile/SYZKALLER/obj",
- kernelObject: "bsd.gdb",
- symbols: symbols,
+ config: &config{
+ kernelSrc: "/usr/src",
+ kernelBuildSrc: "/usr/src",
+ kernelObj: "/usr/src/sys/arch/amd64/compile/SYZKALLER/obj",
+ },
+ kernelObject: "bsd.gdb",
+ symbols: symbols,
}
for i, test := range tests {
t.Run(fmt.Sprint(i), func(t *testing.T) {
diff --git a/pkg/report/report.go b/pkg/report/report.go
index 69b604e2b..a6e82736d 100644
--- a/pkg/report/report.go
+++ b/pkg/report/report.go
@@ -98,7 +98,14 @@ func NewReporter(cfg *mgrconfig.Config) (Reporter, error) {
if target == nil && typ != "gvisor" {
return nil, fmt.Errorf("unknown target %v/%v", cfg.TargetOS, cfg.TargetArch)
}
- rep, suppressions, err := ctor(target, cfg.KernelSrc, cfg.KernelBuildSrc, cfg.KernelObj, ignores)
+ config := &config{
+ target: target,
+ kernelSrc: cfg.KernelSrc,
+ kernelBuildSrc: cfg.KernelBuildSrc,
+ kernelObj: cfg.KernelObj,
+ ignores: ignores,
+ }
+ rep, suppressions, err := ctor(config)
if err != nil {
return nil, err
}
@@ -125,7 +132,15 @@ var ctors = map[string]fn{
"windows": ctorStub,
}
-type fn func(*targets.Target, string, string, string, []*regexp.Regexp) (Reporter, []string, error)
+type config struct {
+ target *targets.Target
+ kernelSrc string
+ kernelBuildSrc string
+ kernelObj string
+ ignores []*regexp.Regexp
+}
+
+type fn func(cfg *config) (Reporter, []string, error)
func compileRegexps(list []string) ([]*regexp.Regexp, error) {
compiled := make([]*regexp.Regexp, len(list))
diff --git a/pkg/report/stub.go b/pkg/report/stub.go
index ba6d20c2e..edd469606 100644
--- a/pkg/report/stub.go
+++ b/pkg/report/stub.go
@@ -3,24 +3,13 @@
package report
-import (
- "regexp"
-
- "github.com/google/syzkaller/sys/targets"
-)
-
type stub struct {
- kernelSrc string
- kernelObj string
- ignores []*regexp.Regexp
+ *config
}
-func ctorStub(target *targets.Target, kernelSrc, kernelBuildSrc, kernelObj string,
- ignores []*regexp.Regexp) (Reporter, []string, error) {
+func ctorStub(cfg *config) (Reporter, []string, error) {
ctx := &stub{
- kernelSrc: kernelSrc,
- kernelObj: kernelObj,
- ignores: ignores,
+ config: cfg,
}
return ctx, nil, nil
}