diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2024-06-24 14:27:07 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2024-06-24 15:05:22 +0000 |
| commit | 215eef4ad85fb6124af70d1e5c9729b69554a32b (patch) | |
| tree | 72c63a1257a13cee00737fbb76d71d72215c940d | |
| parent | 0c0f0b4b3be7a004ae46afe61a8f5e3ad2469e71 (diff) | |
syz-manager: support stdin as port forwarding result
It is returned from vm/gvisor.
| -rw-r--r-- | executor/executor_runner.h | 18 | ||||
| -rw-r--r-- | syz-manager/manager.go | 8 |
2 files changed, 21 insertions, 5 deletions
diff --git a/executor/executor_runner.h b/executor/executor_runner.h index 55a6c422c..385b111c8 100644 --- a/executor/executor_runner.h +++ b/executor/executor_runner.h @@ -765,11 +765,23 @@ static void SigsegvHandler(int sig, siginfo_t* info, void* ucontext) static void runner(char** argv, int argc) { - if (argc != 5) - fail("usage: syz-executor runner <name> <manager-addr> <manager-port>"); + const char* const usage_msg = "usage: syz-executor runner <name> <manager-addr> " + "<manager-port> OR syz-executor runner <name> stdin"; + if (argc < 4 || argc > 5) + fail(usage_msg); + const char* const name = argv[2]; const char* const manager_addr = argv[3]; - const char* const manager_port = argv[4]; + const char* manager_port = NULL; + + if (strcmp(manager_addr, "stdin") == 0) { + // Do not expect a port number for stdin. + if (argc == 5) + fail(usage_msg); + } else if (argc != 5) + fail(usage_msg); + else + manager_port = argv[4]; struct rlimit rlim; rlim.rlim_cur = rlim.rlim_max = kFdLimit; diff --git a/syz-manager/manager.go b/syz-manager/manager.go index d396bedb3..fe5af4d12 100644 --- a/syz-manager/manager.go +++ b/syz-manager/manager.go @@ -905,8 +905,12 @@ func (mgr *Manager) runInstanceInner(index int, instanceName string, injectExec mgr.bootTime.Save(time.Since(start)) start = time.Now() - addrPort := strings.Split(fwdAddr, ":") - cmd := fmt.Sprintf("%v runner %v %v %v", executorBin, instanceName, addrPort[0], addrPort[1]) + addr := fwdAddr + if strings.Contains(fwdAddr, ":") { + addrPort := strings.Split(fwdAddr, ":") + addr = fmt.Sprintf("%v %v", addrPort[0], addrPort[1]) + } + cmd := fmt.Sprintf("%v runner %v %v", executorBin, instanceName, addr) _, rep, err := inst.Run(mgr.cfg.Timeouts.VMRunningTime, mgr.reporter, cmd, vm.ExitTimeout, vm.StopChan(mgr.vmStop), vm.InjectExecuting(injectExec), vm.EarlyFinishCb(func() { |
