aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-02-20 10:54:03 +0100
committerDmitry Vyukov <dvyukov@google.com>2018-02-20 10:54:03 +0100
commitc8e73b95c61fa26c0f6c2d0b96dee38ba1b13958 (patch)
tree6383958a3a66477c92ad15a426d82de02b7ccf08
parentc1f526e3e53eb3a29ad71b866b67ec0c2bab5e82 (diff)
sys/linux: fix mmap call args
Also add a test for this.
-rw-r--r--pkg/ipc/ipc_test.go22
-rw-r--r--sys/linux/init.go2
2 files changed, 16 insertions, 8 deletions
diff --git a/pkg/ipc/ipc_test.go b/pkg/ipc/ipc_test.go
index b4648f9a7..03de4ebf1 100644
--- a/pkg/ipc/ipc_test.go
+++ b/pkg/ipc/ipc_test.go
@@ -63,7 +63,7 @@ func initTest(t *testing.T) (*prog.Target, rand.Source, int, EnvFlags) {
return target, rs, iters, flags
}
-func TestEmptyProg(t *testing.T) {
+func TestSimpleProg(t *testing.T) {
target, _, _, flags0 := initTest(t)
bin := buildExecutor(t, target)
@@ -79,19 +79,27 @@ func TestEmptyProg(t *testing.T) {
t.Fatalf("failed to create env: %v", err)
}
defer env.Close()
-
- p := new(prog.Prog)
+ p := target.GenerateSimpleProg()
opts := &ExecOpts{}
- output, _, failed, hanged, err := env.Exec(opts, p)
+ output, info, failed, hanged, err := env.Exec(opts, p)
if err != nil {
t.Fatalf("failed to run executor: %v", err)
}
+ if hanged {
+ t.Fatalf("program hanged:\n%s", output)
+ }
+ if failed {
+ t.Fatalf("program failed:\n%s", output)
+ }
+ if len(info) == 0 {
+ t.Fatalf("no calls executed:\n%s", output)
+ }
+ if info[0].Errno != 0 {
+ t.Fatalf("simple call failed: %v\n%s", info[0].Errno, output)
+ }
if len(output) != 0 {
t.Fatalf("output on empty program")
}
- if failed || hanged {
- t.Fatalf("empty program failed")
- }
}
func TestExecute(t *testing.T) {
diff --git a/sys/linux/init.go b/sys/linux/init.go
index a411ed97b..aee900fcc 100644
--- a/sys/linux/init.go
+++ b/sys/linux/init.go
@@ -109,7 +109,7 @@ func (arch *arch) makeMmap(addr, size uint64) *prog.Call {
Meta: meta,
Args: []prog.Arg{
prog.MakeVmaPointerArg(meta.Args[0], addr, size),
- prog.MakeConstArg(meta.Args[1], addr),
+ prog.MakeConstArg(meta.Args[1], size),
prog.MakeConstArg(meta.Args[2], arch.PROT_READ|arch.PROT_WRITE),
prog.MakeConstArg(meta.Args[3], arch.MAP_ANONYMOUS|arch.MAP_PRIVATE|arch.MAP_FIXED),
prog.MakeResultArg(meta.Args[4], nil, invalidFD),