aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2024-05-03 14:16:11 +0200
committerDmitry Vyukov <dvyukov@google.com>2024-05-03 12:27:18 +0000
commitbf7ecb7cfe9145d8e169454ff6538a307124f82c (patch)
tree68105ffb3d271074ff3352032fda6dbcf4937d1c
parent50e79216e519b56f3a66730ec6149023bf9407ac (diff)
pkg/cover: move KernelModule from pkg/host
In preparation for pkg/host removal. Nothing in pkg/host uses KernelModule, and pkg/cover is effectively the only user of KernelModule.
-rw-r--r--pkg/cover/backend/backend.go3
-rw-r--r--pkg/cover/backend/dwarf.go3
-rw-r--r--pkg/cover/backend/elf.go3
-rw-r--r--pkg/cover/backend/gvisor.go3
-rw-r--r--pkg/cover/backend/mach-o.go3
-rw-r--r--pkg/cover/backend/modules.go12
-rw-r--r--pkg/cover/canonicalizer.go11
-rw-r--r--pkg/cover/canonicalizer_test.go10
-rw-r--r--pkg/cover/report.go5
-rw-r--r--pkg/host/machine_info.go6
-rw-r--r--pkg/vminfo/linux.go8
-rw-r--r--pkg/vminfo/vminfo.go7
-rw-r--r--syz-manager/cover.go3
-rw-r--r--syz-manager/covfilter.go4
-rw-r--r--syz-manager/rpc.go2
-rw-r--r--tools/syz-cover/syz-cover.go7
16 files changed, 40 insertions, 50 deletions
diff --git a/pkg/cover/backend/backend.go b/pkg/cover/backend/backend.go
index 7ac0e8140..78e90b6c0 100644
--- a/pkg/cover/backend/backend.go
+++ b/pkg/cover/backend/backend.go
@@ -6,7 +6,6 @@ package backend
import (
"fmt"
- "github.com/google/syzkaller/pkg/host"
"github.com/google/syzkaller/sys/targets"
)
@@ -68,7 +67,7 @@ type Range struct {
const LineEnd = 1 << 30
func Make(target *targets.Target, vm, objDir, srcDir, buildDir string, splitBuild bool,
- moduleObj []string, modules []host.KernelModule) (*Impl, error) {
+ moduleObj []string, modules []KernelModule) (*Impl, error) {
if objDir == "" {
return nil, fmt.Errorf("kernel obj directory is not specified")
}
diff --git a/pkg/cover/backend/dwarf.go b/pkg/cover/backend/dwarf.go
index c99bd3265..9cad576be 100644
--- a/pkg/cover/backend/dwarf.go
+++ b/pkg/cover/backend/dwarf.go
@@ -18,7 +18,6 @@ import (
"strconv"
"strings"
- "github.com/google/syzkaller/pkg/host"
"github.com/google/syzkaller/pkg/osutil"
"github.com/google/syzkaller/pkg/symbolizer"
"github.com/google/syzkaller/sys/targets"
@@ -31,7 +30,7 @@ type dwarfParams struct {
buildDir string
splitBuildDelimiters []string
moduleObj []string
- hostModules []host.KernelModule
+ hostModules []KernelModule
readSymbols func(*Module, *symbolInfo) ([]*Symbol, error)
readTextData func(*Module) ([]byte, error)
readModuleCoverPoints func(*targets.Target, *Module, *symbolInfo) ([2][]uint64, error)
diff --git a/pkg/cover/backend/elf.go b/pkg/cover/backend/elf.go
index cb2c7d706..a2e7f3747 100644
--- a/pkg/cover/backend/elf.go
+++ b/pkg/cover/backend/elf.go
@@ -10,13 +10,12 @@ import (
"io"
"strings"
- "github.com/google/syzkaller/pkg/host"
"github.com/google/syzkaller/pkg/log"
"github.com/google/syzkaller/sys/targets"
)
func makeELF(target *targets.Target, objDir, srcDir, buildDir string, splitBuildDelimiters, moduleObj []string,
- hostModules []host.KernelModule) (*Impl, error) {
+ hostModules []KernelModule) (*Impl, error) {
return makeDWARF(&dwarfParams{
target: target,
objDir: objDir,
diff --git a/pkg/cover/backend/gvisor.go b/pkg/cover/backend/gvisor.go
index 8e2a32d48..2e662f4bd 100644
--- a/pkg/cover/backend/gvisor.go
+++ b/pkg/cover/backend/gvisor.go
@@ -10,12 +10,11 @@ import (
"regexp"
"strconv"
- "github.com/google/syzkaller/pkg/host"
"github.com/google/syzkaller/pkg/osutil"
"github.com/google/syzkaller/sys/targets"
)
-func makeGvisor(target *targets.Target, objDir, srcDir, buildDir string, modules []host.KernelModule) (*Impl, error) {
+func makeGvisor(target *targets.Target, objDir, srcDir, buildDir string, modules []KernelModule) (*Impl, error) {
if len(modules) != 0 {
return nil, fmt.Errorf("gvisor coverage does not support modules")
}
diff --git a/pkg/cover/backend/mach-o.go b/pkg/cover/backend/mach-o.go
index cfc56c431..0d3546cec 100644
--- a/pkg/cover/backend/mach-o.go
+++ b/pkg/cover/backend/mach-o.go
@@ -10,12 +10,11 @@ import (
"sort"
"strings"
- "github.com/google/syzkaller/pkg/host"
"github.com/google/syzkaller/sys/targets"
)
func makeMachO(target *targets.Target, objDir, srcDir, buildDir string,
- moduleObj []string, hostModules []host.KernelModule) (*Impl, error) {
+ moduleObj []string, hostModules []KernelModule) (*Impl, error) {
return makeDWARF(&dwarfParams{
target: target,
objDir: objDir,
diff --git a/pkg/cover/backend/modules.go b/pkg/cover/backend/modules.go
index 1d9b0a0f6..2d0e3c330 100644
--- a/pkg/cover/backend/modules.go
+++ b/pkg/cover/backend/modules.go
@@ -11,13 +11,18 @@ import (
"path/filepath"
"strings"
- "github.com/google/syzkaller/pkg/host"
"github.com/google/syzkaller/pkg/log"
"github.com/google/syzkaller/sys/targets"
)
+type KernelModule struct {
+ Name string
+ Addr uint64
+ Size uint64
+}
+
func discoverModules(target *targets.Target, objDir string, moduleObj []string,
- hostModules []host.KernelModule) (
+ hostModules []KernelModule) (
[]*Module, error) {
modules := []*Module{
// A dummy module representing the kernel itself.
@@ -36,8 +41,7 @@ func discoverModules(target *targets.Target, objDir string, moduleObj []string,
return modules, nil
}
-func discoverModulesLinux(dirs []string, hostModules []host.KernelModule,
-) ([]*Module, error) {
+func discoverModulesLinux(dirs []string, hostModules []KernelModule) ([]*Module, error) {
paths, err := locateModules(dirs)
if err != nil {
return nil, err
diff --git a/pkg/cover/canonicalizer.go b/pkg/cover/canonicalizer.go
index d3b014af8..3c21c0947 100644
--- a/pkg/cover/canonicalizer.go
+++ b/pkg/cover/canonicalizer.go
@@ -7,13 +7,12 @@ import (
"fmt"
"sort"
- "github.com/google/syzkaller/pkg/host"
"github.com/google/syzkaller/pkg/log"
)
type Canonicalizer struct {
// Map of modules stored as module name:kernel module.
- modules map[string]host.KernelModule
+ modules map[string]KernelModule
// Contains a sorted list of the canonical module addresses.
moduleKeys []uint32
@@ -48,13 +47,13 @@ type canonicalizerModule struct {
discard bool
}
-func NewCanonicalizer(modules []host.KernelModule, flagSignal bool) *Canonicalizer {
+func NewCanonicalizer(modules []KernelModule, flagSignal bool) *Canonicalizer {
// Return if not using canonicalization.
if len(modules) == 0 || !flagSignal {
return &Canonicalizer{}
}
// Create a map of canonical module offsets by name.
- canonicalModules := make(map[string]host.KernelModule)
+ canonicalModules := make(map[string]KernelModule)
for _, module := range modules {
canonicalModules[module.Name] = module
}
@@ -68,7 +67,7 @@ func NewCanonicalizer(modules []host.KernelModule, flagSignal bool) *Canonicaliz
}
}
-func (can *Canonicalizer) NewInstance(modules []host.KernelModule) *CanonicalizerInstance {
+func (can *Canonicalizer) NewInstance(modules []KernelModule) *CanonicalizerInstance {
if can.moduleKeys == nil {
return &CanonicalizerInstance{}
}
@@ -154,7 +153,7 @@ func (ci *CanonicalizerInstance) DecanonicalizeFilter(bitmap map[uint32]uint32)
}
// Store sorted list of addresses. Used to binary search when converting PCs.
-func setModuleKeys(moduleKeys []uint32, modules []host.KernelModule) {
+func setModuleKeys(moduleKeys []uint32, modules []KernelModule) {
for idx, module := range modules {
// Truncate PCs to uint32, assuming that they fit into 32 bits.
// True for x86_64 and arm64 without KASLR.
diff --git a/pkg/cover/canonicalizer_test.go b/pkg/cover/canonicalizer_test.go
index f438af335..b826008be 100644
--- a/pkg/cover/canonicalizer_test.go
+++ b/pkg/cover/canonicalizer_test.go
@@ -10,8 +10,6 @@ import (
"reflect"
"strconv"
"testing"
-
- "github.com/google/syzkaller/pkg/host"
)
type RPCServer struct {
@@ -246,7 +244,7 @@ func (serv *RPCServer) runTest(val canonicalizeValue) string {
return ""
}
-func (serv *RPCServer) connect(name string, modules []host.KernelModule, flagSignal bool) {
+func (serv *RPCServer) connect(name string, modules []KernelModule, flagSignal bool) {
if !serv.modulesInitialized {
serv.canonicalModules = NewCanonicalizer(modules, flagSignal)
serv.modulesInitialized = true
@@ -257,10 +255,10 @@ func (serv *RPCServer) connect(name string, modules []host.KernelModule, flagSig
}
}
-func initModules(addrs, sizes []uint64) []host.KernelModule {
- var modules []host.KernelModule
+func initModules(addrs, sizes []uint64) []KernelModule {
+ var modules []KernelModule
for idx, addr := range addrs {
- modules = append(modules, host.KernelModule{
+ modules = append(modules, KernelModule{
Name: strconv.FormatInt(int64(idx), 10),
Addr: addr,
Size: sizes[idx],
diff --git a/pkg/cover/report.go b/pkg/cover/report.go
index 5ccd499c5..b0113ca14 100644
--- a/pkg/cover/report.go
+++ b/pkg/cover/report.go
@@ -8,7 +8,6 @@ import (
"sort"
"github.com/google/syzkaller/pkg/cover/backend"
- "github.com/google/syzkaller/pkg/host"
"github.com/google/syzkaller/pkg/mgrconfig"
"github.com/google/syzkaller/sys/targets"
"golang.org/x/exp/maps"
@@ -29,10 +28,12 @@ type Prog struct {
PCs []uint64
}
+type KernelModule = backend.KernelModule
+
var RestorePC = backend.RestorePC
func MakeReportGenerator(cfg *mgrconfig.Config, subsystem []mgrconfig.Subsystem,
- modules []host.KernelModule, rawCover bool) (*ReportGenerator, error) {
+ modules []KernelModule, rawCover bool) (*ReportGenerator, error) {
impl, err := backend.Make(cfg.SysTarget, cfg.Type, cfg.KernelObj,
cfg.KernelSrc, cfg.KernelBuildSrc, cfg.AndroidSplitBuild, cfg.ModuleObj, modules)
if err != nil {
diff --git a/pkg/host/machine_info.go b/pkg/host/machine_info.go
index 698a575a1..ee344dd0b 100644
--- a/pkg/host/machine_info.go
+++ b/pkg/host/machine_info.go
@@ -9,12 +9,6 @@ import (
"strings"
)
-type KernelModule struct {
- Name string `json:"Name"`
- Addr uint64 `json:"Addr"`
- Size uint64 `json:"Size"`
-}
-
type FileInfo struct {
Name string
Exists bool
diff --git a/pkg/vminfo/linux.go b/pkg/vminfo/linux.go
index d5e84254f..2735ad0ef 100644
--- a/pkg/vminfo/linux.go
+++ b/pkg/vminfo/linux.go
@@ -13,7 +13,7 @@ import (
"strconv"
"strings"
- "github.com/google/syzkaller/pkg/host"
+ "github.com/google/syzkaller/pkg/cover"
)
type linux int
@@ -43,8 +43,8 @@ func (linux) machineInfos() []machineInfoFunc {
}
}
-func (linux) parseModules(files filesystem) ([]host.KernelModule, error) {
- var modules []host.KernelModule
+func (linux) parseModules(files filesystem) ([]cover.KernelModule, error) {
+ var modules []cover.KernelModule
re := regexp.MustCompile(`(\w+) ([0-9]+) .*(0[x|X][a-fA-F0-9]+)[^\n]*`)
modulesText, _ := files.ReadFile("/proc/modules")
for _, match := range re.FindAllSubmatch(modulesText, -1) {
@@ -65,7 +65,7 @@ func (linux) parseModules(files filesystem) ([]host.KernelModule, error) {
return nil, fmt.Errorf("module %v size parsing error: %w", name, err)
}
offset := modAddr - textAddr
- modules = append(modules, host.KernelModule{
+ modules = append(modules, cover.KernelModule{
Name: name,
Addr: textAddr,
Size: modSize - offset,
diff --git a/pkg/vminfo/vminfo.go b/pkg/vminfo/vminfo.go
index ee2541ad3..eae8ae4a3 100644
--- a/pkg/vminfo/vminfo.go
+++ b/pkg/vminfo/vminfo.go
@@ -21,6 +21,7 @@ import (
"os"
"strings"
+ "github.com/google/syzkaller/pkg/cover"
"github.com/google/syzkaller/pkg/host"
"github.com/google/syzkaller/pkg/mgrconfig"
"github.com/google/syzkaller/pkg/rpctype"
@@ -47,7 +48,7 @@ func New(cfg *mgrconfig.Config) *Checker {
}
}
-func (checker *Checker) MachineInfo(fileInfos []host.FileInfo) ([]host.KernelModule, []byte, error) {
+func (checker *Checker) MachineInfo(fileInfos []host.FileInfo) ([]cover.KernelModule, []byte, error) {
files := createVirtualFilesystem(fileInfos)
modules, err := checker.parseModules(files)
if err != nil {
@@ -88,7 +89,7 @@ type machineInfoFunc func(files filesystem, w io.Writer) (string, error)
type checker interface {
RequiredFiles() []string
checkFiles() []string
- parseModules(files filesystem) ([]host.KernelModule, error)
+ parseModules(files filesystem) ([]cover.KernelModule, error)
machineInfos() []machineInfoFunc
syscallCheck(*checkContext, *prog.Syscall) string
}
@@ -148,7 +149,7 @@ func (stub) checkFiles() []string {
return nil
}
-func (stub) parseModules(files filesystem) ([]host.KernelModule, error) {
+func (stub) parseModules(files filesystem) ([]cover.KernelModule, error) {
return nil, nil
}
diff --git a/syz-manager/cover.go b/syz-manager/cover.go
index 31fabeca9..d97f01358 100644
--- a/syz-manager/cover.go
+++ b/syz-manager/cover.go
@@ -7,7 +7,6 @@ import (
"sync"
"github.com/google/syzkaller/pkg/cover"
- "github.com/google/syzkaller/pkg/host"
"github.com/google/syzkaller/pkg/log"
"github.com/google/syzkaller/pkg/mgrconfig"
)
@@ -17,7 +16,7 @@ var (
cachedRepGen *cover.ReportGenerator
)
-func getReportGenerator(cfg *mgrconfig.Config, modules []host.KernelModule) (*cover.ReportGenerator, error) {
+func getReportGenerator(cfg *mgrconfig.Config, modules []cover.KernelModule) (*cover.ReportGenerator, error) {
cachedRepGenMu.Lock()
defer cachedRepGenMu.Unlock()
if cachedRepGen == nil {
diff --git a/syz-manager/covfilter.go b/syz-manager/covfilter.go
index 3e3a30647..2acb06a5b 100644
--- a/syz-manager/covfilter.go
+++ b/syz-manager/covfilter.go
@@ -12,14 +12,14 @@ import (
"sort"
"strconv"
+ "github.com/google/syzkaller/pkg/cover"
"github.com/google/syzkaller/pkg/cover/backend"
- "github.com/google/syzkaller/pkg/host"
"github.com/google/syzkaller/pkg/log"
"github.com/google/syzkaller/pkg/mgrconfig"
"github.com/google/syzkaller/sys/targets"
)
-func createCoverageFilter(cfg *mgrconfig.Config, modules []host.KernelModule) (
+func createCoverageFilter(cfg *mgrconfig.Config, modules []cover.KernelModule) (
map[uint32]uint32, map[uint32]uint32, error) {
if !cfg.HasCovFilter() {
return nil, nil, nil
diff --git a/syz-manager/rpc.go b/syz-manager/rpc.go
index fab496d26..e777e67f8 100644
--- a/syz-manager/rpc.go
+++ b/syz-manager/rpc.go
@@ -42,7 +42,7 @@ type RPCServer struct {
needCheckResults int
checkFailures int
checkFeatures *host.Features
- modules []host.KernelModule
+ modules []cover.KernelModule
canonicalModules *cover.Canonicalizer
execCoverFilter map[uint32]uint32
coverFilter map[uint32]uint32
diff --git a/tools/syz-cover/syz-cover.go b/tools/syz-cover/syz-cover.go
index b277d39c2..325bd4157 100644
--- a/tools/syz-cover/syz-cover.go
+++ b/tools/syz-cover/syz-cover.go
@@ -31,7 +31,6 @@ import (
"strings"
"github.com/google/syzkaller/pkg/cover"
- "github.com/google/syzkaller/pkg/host"
"github.com/google/syzkaller/pkg/mgrconfig"
"github.com/google/syzkaller/pkg/osutil"
"github.com/google/syzkaller/pkg/tool"
@@ -53,7 +52,7 @@ func main() {
if err != nil {
tool.Fail(err)
}
- var modules []host.KernelModule
+ var modules []cover.KernelModule
if *flagModules != "" {
m, err := loadModules(*flagModules)
if err != nil {
@@ -155,12 +154,12 @@ func readPCs(files []string) ([]uint64, error) {
return pcs, nil
}
-func loadModules(fname string) ([]host.KernelModule, error) {
+func loadModules(fname string) ([]cover.KernelModule, error) {
data, err := os.ReadFile(fname)
if err != nil {
return nil, err
}
- var modules []host.KernelModule
+ var modules []cover.KernelModule
err = json.Unmarshal(data, &modules)
if err != nil {
return nil, err