<div dir="ltr">Dropbear child process (shells created by client connections) would hang around after the server process<br>has exited.&nbsp; This patch will kill these child processes when the dropbear server exits.<br><br>Common subdirectories: ../../dropbear-vanilla/dropbear-0.51/debian and ../../dropbear-killchild/dropbear-0.51/debian<br>
Common subdirectories: ../../dropbear-vanilla/dropbear-0.51/libtomcrypt and ../../dropbear-killchild/dropbear-0.51/libtomcrypt<br>Common subdirectories: ../../dropbear-vanilla/dropbear-0.51/libtommath and ../../dropbear-killchild/dropbear-0.51/libtommath<br>
Common subdirectories: ../../dropbear-vanilla/dropbear-0.51/_MTN and ../../dropbear-killchild/dropbear-0.51/_MTN<br>Only in ../../dropbear-killchild/dropbear-0.51: patch051.killchild<br>diff -up ../../dropbear-vanilla/dropbear-0.51/svr-session.c ../../dropbear-killchild/dropbear-0.51/svr-session.c<br>
--- ../../dropbear-vanilla/dropbear-0.51/svr-session.c&nbsp;&nbsp;&nbsp; 2008-03-27 09:17:16.000000000 -0400<br>+++ ../../dropbear-killchild/dropbear-0.51/svr-session.c&nbsp;&nbsp;&nbsp; 2008-09-19 11:06:51.000000000 -0400<br>@@ -117,10 +117,19 @@ void svr_session(int sock, int childpipe<br>
&nbsp;<br>&nbsp;}<br>&nbsp;<br>+static void killchild(int pid) {<br>+<br>+&nbsp;&nbsp;&nbsp; if (pid &gt; 1) {<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; kill(pid, SIGTERM);<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; waitpid(pid, NULL, 0);<br>+&nbsp;&nbsp;&nbsp; }<br>+}<br>+<br>&nbsp;/* failure exit - format must be &lt;= 100 chars */<br>
&nbsp;void svr_dropbear_exit(int exitcode, const char* format, va_list param) {<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; char fmtbuf[300];<br>+&nbsp;&nbsp;&nbsp; int i;<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; if (!sessinitdone) {<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* before session init */<br>@@ -147,6 +156,11 @@ void svr_dropbear_exit(int exitcode, con<br>
&nbsp;&nbsp;&nbsp;&nbsp; /* must be after we&#39;ve done with username etc */<br>&nbsp;&nbsp;&nbsp;&nbsp; common_session_cleanup();<br>&nbsp;<br>+&nbsp;&nbsp;&nbsp; /* kill child processes */<br>+&nbsp;&nbsp;&nbsp; for (i = 0; i &lt; svr_ses.childpidsize; i++) {<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; killchild(svr_ses.childpids[i].pid);<br>
+&nbsp;&nbsp;&nbsp; }<br>+<br>&nbsp;&nbsp;&nbsp;&nbsp; exit(exitcode);<br>&nbsp;<br>&nbsp;}<br></div>