aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2020-12-09 12:57:56 +0100
committerDmitry Vyukov <dvyukov@google.com>2020-12-10 10:53:37 +0100
commit3bb04c298f1dee7f49e02cd857647dc3d456bbed (patch)
tree3cacdb3bd3d68a7095e9caf086d464a5fdb93685 /pkg
parent9a72bc3440b65a01187ba4277b49d6bd821079cd (diff)
pkg/host: check presence of syz_open_procfs file
Diffstat (limited to 'pkg')
-rw-r--r--pkg/host/syscalls_linux.go30
1 files changed, 18 insertions, 12 deletions
diff --git a/pkg/host/syscalls_linux.go b/pkg/host/syscalls_linux.go
index cb7950440..e31e0dc24 100644
--- a/pkg/host/syscalls_linux.go
+++ b/pkg/host/syscalls_linux.go
@@ -276,7 +276,7 @@ func isSyzUsbIPSupported(c *prog.Syscall, target *prog.Target, sandbox string) (
var syzkallSupport = map[string]func(*prog.Syscall, *prog.Target, string) (bool, string){
"syz_open_dev": isSyzOpenDevSupported,
- "syz_open_procfs": alwaysSupported,
+ "syz_open_procfs": isSyzOpenProcfsSupported,
"syz_open_pts": alwaysSupported,
"syz_execute_func": alwaysSupported,
"syz_emit_ethernet": isNetInjectionSupported,
@@ -438,23 +438,30 @@ func isSupportedSocket(c *prog.Syscall) (bool, string) {
return false, err.Error()
}
-func isSupportedOpenAt(c *prog.Syscall) (bool, string) {
- var fd int
- var err error
-
- fname, ok := extractStringConst(c.Args[1].Type)
- if !ok || fname == "" || fname[0] != '/' {
- return true, ""
- }
-
- modes := []int{syscall.O_RDONLY, syscall.O_WRONLY, syscall.O_RDWR}
+func isSyzOpenProcfsSupported(c *prog.Syscall, target *prog.Target, sandbox string) (bool, string) {
+ return isSupportedOpenFile(c, 1, nil)
+}
+func isSupportedOpenAt(c *prog.Syscall) (bool, string) {
// Attempt to extract flags from the syscall description.
+ var modes []int
if mode, ok := c.Args[2].Type.(*prog.ConstType); ok {
modes = []int{int(mode.Val)}
}
+ return isSupportedOpenFile(c, 1, modes)
+}
+func isSupportedOpenFile(c *prog.Syscall, filenameArg int, modes []int) (bool, string) {
+ fname, ok := extractStringConst(c.Args[filenameArg].Type)
+ if !ok || fname == "" || fname[0] != '/' {
+ return true, ""
+ }
+ if len(modes) == 0 {
+ modes = []int{syscall.O_RDONLY, syscall.O_WRONLY, syscall.O_RDWR}
+ }
+ var err error
for _, mode := range modes {
+ var fd int
fd, err = syscall.Open(fname, mode, 0)
if fd != -1 {
syscall.Close(fd)
@@ -463,7 +470,6 @@ func isSupportedOpenAt(c *prog.Syscall) (bool, string) {
return true, ""
}
}
-
return false, fmt.Sprintf("open(%v) failed: %v", fname, err)
}