diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2016-01-20 13:58:57 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2016-01-20 13:58:57 +0100 |
| commit | 8cff5843fb3bbbc1342cf3aafbff953f4477761f (patch) | |
| tree | 4b0588bf60a8110f70cde42051a526021c496542 | |
| parent | aa1b7fe3a884674848f5f5a8edb4a9ad981fcad2 (diff) | |
vm/adb: use a more reliable way to reboot devices
| -rw-r--r-- | config/config.go | 1 | ||||
| -rw-r--r-- | executor/executor.cc | 7 | ||||
| -rw-r--r-- | syz-manager/manager.go | 4 | ||||
| -rw-r--r-- | vm/adb/adb.go | 9 | ||||
| -rw-r--r-- | vm/vm.go | 1 |
5 files changed, 17 insertions, 5 deletions
diff --git a/config/config.go b/config/config.go index 71412fc68..a4f81ffa0 100644 --- a/config/config.go +++ b/config/config.go @@ -199,6 +199,7 @@ func CreateVMConfig(cfg *Config) (*vm.Config, error) { Cmdline: cfg.Cmdline, Image: cfg.Image, Sshkey: cfg.Sshkey, + Executor: filepath.Join(cfg.Syzkaller, "bin", "syz-executor"), ConsoleDev: cfg.ConsoleDev, Cpu: cfg.Cpu, Mem: cfg.Mem, diff --git a/executor/executor.cc b/executor/executor.cc index f3ab3cde9..2cefbf66c 100644 --- a/executor/executor.cc +++ b/executor/executor.cc @@ -131,8 +131,13 @@ void cover_reset(thread_t* th); uintptr_t cover_read(thread_t* th); uintptr_t cover_dedup(thread_t* th, uintptr_t n); -int main() +int main(int argc, char** argv) { + if (argc == 2 && strcmp(argv[1], "reboot") == 0) { + reboot(LINUX_REBOOT_CMD_RESTART); + return 0; + } + if (mmap(&input_data[0], kMaxInput, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, kInFd, 0) != &input_data[0]) fail("mmap of input file failed"); if (mmap(&output_data[0], kMaxOutput, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED, kOutFd, 0) != &output_data[0]) diff --git a/syz-manager/manager.go b/syz-manager/manager.go index edcd04c24..c625e5a96 100644 --- a/syz-manager/manager.go +++ b/syz-manager/manager.go @@ -186,12 +186,12 @@ func (mgr *Manager) runInstance(vmCfg *vm.Config, first bool) bool { logf(0, "failed to setup port forwarding: %v", err) return false } - fuzzerBin, err := inst.Copy(filepath.Join(mgr.cfg.Syzkaller, "bin/syz-fuzzer")) + fuzzerBin, err := inst.Copy(filepath.Join(mgr.cfg.Syzkaller, "bin", "syz-fuzzer")) if err != nil { logf(0, "failed to copy binary: %v", err) return false } - executorBin, err := inst.Copy(filepath.Join(mgr.cfg.Syzkaller, "bin/syz-executor")) + executorBin, err := inst.Copy(filepath.Join(mgr.cfg.Syzkaller, "bin", "syz-executor")) if err != nil { logf(0, "failed to copy binary: %v", err) return false diff --git a/vm/adb/adb.go b/vm/adb/adb.go index 5fa3d17dd..5508667c0 100644 --- a/vm/adb/adb.go +++ b/vm/adb/adb.go @@ -74,9 +74,14 @@ func (inst *instance) adbOK() error { } func (inst *instance) adbReboot() error { - if _, err := inst.adb("reboot"); err != nil { - return fmt.Errorf("adb reboot failed: %v", err) + // adb reboot episodically hangs, so we use a more reliable way. + if _, err := inst.adb("push", inst.cfg.Executor, "/data/syz-executor"); err != nil { + return err } + if _, err := inst.adb("shell", "/data/syz-executor", "reboot"); err != nil { + return err + } + time.Sleep(10 * time.Second) for i := 0; i < 300; i++ { time.Sleep(time.Second) if inst.adbOK() == nil { @@ -37,6 +37,7 @@ type Config struct { Cmdline string Image string Sshkey string + Executor string ConsoleDev string Cpu int Mem int |
