aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'pkg')
-rw-r--r--pkg/csource/csource.go7
-rw-r--r--pkg/host/syscalls_linux.go21
2 files changed, 22 insertions, 6 deletions
diff --git a/pkg/csource/csource.go b/pkg/csource/csource.go
index 6dd8bdcd6..1ba433f45 100644
--- a/pkg/csource/csource.go
+++ b/pkg/csource/csource.go
@@ -73,6 +73,13 @@ func (ctx *context) generateSource() ([]byte, error) {
for _, c := range append(mmapProg.Calls, ctx.p.Calls...) {
ctx.calls[c.Meta.CallName] = c.Meta.NR
+ for _, dep := range ctx.sysTarget.PseudoSyscallDeps[c.Meta.CallName] {
+ depCall := ctx.target.SyscallMap[dep]
+ if depCall == nil {
+ panic(dep + " is specified in PseudoSyscallDeps, but not present")
+ }
+ ctx.calls[depCall.CallName] = depCall.NR
+ }
}
varsBuf := new(bytes.Buffer)
diff --git a/pkg/host/syscalls_linux.go b/pkg/host/syscalls_linux.go
index 1d305b4e0..f43f1ada3 100644
--- a/pkg/host/syscalls_linux.go
+++ b/pkg/host/syscalls_linux.go
@@ -71,6 +71,14 @@ func isSupportedSyscall(c *prog.Syscall, target *prog.Target) (bool, string) {
return isSupportedTrial(c)
}
+func isSupportedSyscallName(name string, target *prog.Target) (bool, string) {
+ syscall := target.SyscallMap[name]
+ if syscall == nil {
+ return false, fmt.Sprintf("sys_%v is not present in the target", name)
+ }
+ return isSupportedSyscall(syscall, target)
+}
+
func parseKallsyms(kallsyms []byte, arch string) map[string]bool {
set := make(map[string]bool)
var re *regexp.Regexp
@@ -245,12 +253,7 @@ func isSyzReadPartTableSupported(c *prog.Syscall, target *prog.Target, sandbox s
}
func isSyzIoUringSupported(c *prog.Syscall, target *prog.Target, sandbox string) (bool, string) {
- ioUringSyscallName := "io_uring_setup"
- ioUringSyscall := target.SyscallMap[ioUringSyscallName]
- if ioUringSyscall == nil {
- return false, fmt.Sprintf("sys_%v is not present in the target", ioUringSyscallName)
- }
- return isSupportedSyscall(ioUringSyscall, target)
+ return isSupportedSyscallName("io_uring_setup", target)
}
func isSyzMemcpySupported(c *prog.Syscall, target *prog.Target, sandbox string) (bool, string) {
@@ -316,6 +319,12 @@ var syzkallSupport = map[string]func(*prog.Syscall, *prog.Target, string) (bool,
}
func isSupportedSyzkall(c *prog.Syscall, target *prog.Target, sandbox string) (bool, string) {
+ sysTarget := targets.Get(target.OS, target.Arch)
+ for _, depCall := range sysTarget.PseudoSyscallDeps[c.CallName] {
+ if ok, reason := isSupportedSyscallName(depCall, target); !ok {
+ return ok, reason
+ }
+ }
if isSupported, ok := syzkallSupport[c.CallName]; ok {
return isSupported(c, target, sandbox)
}