diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2019-07-23 09:15:43 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2019-07-23 09:15:43 +0200 |
| commit | d9ec038e02b467c11141dc238037ac7413ee6c1f (patch) | |
| tree | 6876fd8e0fec335c2d893b5bfd19447bd3750690 /pkg | |
| parent | b858e6fb5f220b97655fd23bc5f099c42ef4b159 (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.go | 12 | ||||
| -rw-r--r-- | pkg/report/freebsd.go | 13 | ||||
| -rw-r--r-- | pkg/report/fuchsia.go | 14 | ||||
| -rw-r--r-- | pkg/report/gvisor.go | 9 | ||||
| -rw-r--r-- | pkg/report/linux.go | 21 | ||||
| -rw-r--r-- | pkg/report/netbsd.go | 28 | ||||
| -rw-r--r-- | pkg/report/netbsd_test.go | 12 | ||||
| -rw-r--r-- | pkg/report/openbsd.go | 26 | ||||
| -rw-r--r-- | pkg/report/openbsd_test.go | 12 | ||||
| -rw-r--r-- | pkg/report/report.go | 19 | ||||
| -rw-r--r-- | pkg/report/stub.go | 17 |
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 } |
