aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
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 /pkg
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.
Diffstat (limited to 'pkg')
-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
12 files changed, 33 insertions, 41 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
}