diff options
| author | Alexander Potapenko <glider@google.com> | 2024-02-21 14:02:01 +0100 |
|---|---|---|
| committer | Alexander Potapenko <glider@google.com> | 2024-02-22 15:35:18 +0000 |
| commit | 8d446f1521b580230a60c9ae228bf0c26312c80b (patch) | |
| tree | 0090f8a10b15f18c6adc33ecc2ab56a5717d9f92 | |
| parent | 971a0f14c5cf6379d1a1fde7d26b853293bced2b (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.go | 8 | ||||
| -rw-r--r-- | pkg/host/machine_info_linux.go | 20 | ||||
| -rw-r--r-- | tools/syz-cover/syz-cover.go | 7 |
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 } |
