Commit Diff


commit - 9432cd14c34086ae857b4d66358f80496015c33d
commit + 98c3d8979f42c71c2eb00894d54d1618a2340b9f
blob - 1ef78d59801ef309c2eb29896e00a4cc531a265e
blob + 4b7e793ce8230625df932f11cb3a24941a977f15
--- lstun.c
+++ lstun.c
@@ -109,20 +109,21 @@ sig_handler(int sig, short event, void *data)
 	}
 }
 
-static void
+static int
 spawn_ssh(void)
 {
 	log_debug("spawning ssh");
 
 	switch (ssh_pid = fork()) {
 	case -1:
-		fatal("fork");
+		log_warnx("fork");
+		return -1;
 	case 0:
 		execl(SSH_PATH, "ssh", "-L", ssh_tflag, "-NTq", ssh_dest,
 		    NULL);
 		fatal("exec");
 	default:
-		return;
+		return 0;
 	}
 }
 
@@ -300,8 +301,10 @@ do_accept(int fd, short event, void *data)
 
 	conn++;
 
-	if (ssh_pid == -1)
-		spawn_ssh();
+	if (ssh_pid == -1 && spawn_ssh() == -1) {
+		close(s);
+		return;
+	}
 
 	if ((c = calloc(1, sizeof(*c))) == NULL) {
 		log_warn("calloc");