<div dir="ltr">Dropbear child process (shells created by client connections) would hang around after the server process<br>has exited. 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 2008-03-27 09:17:16.000000000 -0400<br>+++ ../../dropbear-killchild/dropbear-0.51/svr-session.c 2008-09-19 11:06:51.000000000 -0400<br>@@ -117,10 +117,19 @@ void svr_session(int sock, int childpipe<br>
<br> }<br> <br>+static void killchild(int pid) {<br>+<br>+ if (pid > 1) {<br>+ kill(pid, SIGTERM);<br>+ waitpid(pid, NULL, 0);<br>+ }<br>+}<br>+<br> /* failure exit - format must be <= 100 chars */<br>
void svr_dropbear_exit(int exitcode, const char* format, va_list param) {<br> <br> char fmtbuf[300];<br>+ int i;<br> <br> if (!sessinitdone) {<br> /* before session init */<br>@@ -147,6 +156,11 @@ void svr_dropbear_exit(int exitcode, con<br>
/* must be after we've done with username etc */<br> common_session_cleanup();<br> <br>+ /* kill child processes */<br>+ for (i = 0; i < svr_ses.childpidsize; i++) {<br>+ killchild(svr_ses.childpids[i].pid);<br>
+ }<br>+<br> exit(exitcode);<br> <br> }<br></div>