aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Potapenko <glider@google.com>2024-02-21 14:02:01 +0100
committerAlexander Potapenko <glider@google.com>2024-02-22 15:35:18 +0000
commit8d446f1521b580230a60c9ae228bf0c26312c80b (patch)
tree0090f8a10b15f18c6adc33ecc2ab56a5717d9f92
parent971a0f14c5cf6379d1a1fde7d26b853293bced2b (diff)
tools/syz-cover: do not accept modules info from /proc/modules
Addresses from /proc/modules have little to do with the addresses of modules' text sections. Instead of trying to fix them by parsing ELF headers, stop supporting this use case. It is still possible to pass modules.json to syz-cover.
-rw-r--r--pkg/host/machine_info.go8
-rw-r--r--pkg/host/machine_info_linux.go20
-rw-r--r--tools/syz-cover/syz-cover.go7
3 files changed, 5 insertions, 30 deletions
diff --git a/pkg/host/machine_info.go b/pkg/host/machine_info.go
index 779356d4a..3c04becab 100644
--- a/pkg/host/machine_info.go
+++ b/pkg/host/machine_info.go
@@ -45,17 +45,9 @@ func CollectGlobsInfo(globs map[string]bool) (map[string][]string, error) {
return machineGlobsInfo(globs)
}
-func ParseModulesText(modulesText []byte) ([]KernelModule, error) {
- if machineParseModules == nil {
- return nil, nil
- }
- return machineParseModules(modulesText)
-}
-
var machineInfoFuncs []machineInfoFunc
var machineModulesInfo func() ([]KernelModule, error)
var machineGlobsInfo func(map[string]bool) (map[string][]string, error)
-var machineParseModules func([]byte) ([]KernelModule, error)
type machineInfoFunc struct {
name string
diff --git a/pkg/host/machine_info_linux.go b/pkg/host/machine_info_linux.go
index ce4e1dbfa..8bb5e8188 100644
--- a/pkg/host/machine_info_linux.go
+++ b/pkg/host/machine_info_linux.go
@@ -21,7 +21,6 @@ func init() {
}
machineModulesInfo = getModulesInfo
machineGlobsInfo = getGlobsInfo
- machineParseModules = parseModules
}
func readCPUInfo(buffer *bytes.Buffer) error {
@@ -140,26 +139,9 @@ func getModuleTextAddr(moduleName string) (uint64, error) {
}
func getModulesInfo() ([]KernelModule, error) {
- modulesText, _ := os.ReadFile("/proc/modules")
- modules, err := parseModules(modulesText)
- if err != nil {
- return modules, err
- }
- // Fix up module addresses to use .text addresses where available.
- for i, module := range modules {
- addr, err := getModuleTextAddr(module.Name)
- if err == nil {
- offset := addr - modules[i].Addr
- modules[i].Addr += offset
- modules[i].Size -= offset
- }
- }
- return modules, nil
-}
-
-func parseModules(modulesText []byte) ([]KernelModule, error) {
var modules []KernelModule
re := regexp.MustCompile(`(\w+) ([0-9]+) .*(0[x|X][a-fA-F0-9]+)[^\n]*`)
+ modulesText, _ := os.ReadFile("/proc/modules")
for _, m := range re.FindAllSubmatch(modulesText, -1) {
name := string(m[1])
modAddr, err := strconv.ParseUint(string(m[3]), 0, 64)
diff --git a/tools/syz-cover/syz-cover.go b/tools/syz-cover/syz-cover.go
index 4023f3e5b..ffecebf67 100644
--- a/tools/syz-cover/syz-cover.go
+++ b/tools/syz-cover/syz-cover.go
@@ -41,7 +41,7 @@ func main() {
var (
flagConfig = flag.String("config", "", "configuration file")
flagModules = flag.String("modules", "",
- "modules info obtained from /modules or file from /proc/modules (optional)")
+ "modules JSON info obtained from /modules (optional)")
flagExportCSV = flag.String("csv", "", "export coverage data in csv format (optional)")
flagExportLineJSON = flag.String("json", "", "export coverage data with source line info in json format (optional)")
flagExportHTML = flag.String("html", "", "save coverage HTML report to file (optional)")
@@ -150,8 +150,9 @@ func loadModules(fname string) ([]host.KernelModule, error) {
return nil, err
}
var modules []host.KernelModule
- if err := json.Unmarshal(data, &modules); err != nil {
- return host.ParseModulesText(data)
+ err = json.Unmarshal(data, &modules)
+ if err != nil {
+ return nil, err
}
return modules, nil
}