mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-12-26 08:04:37 +02:00
48 lines
1.5 KiB
Diff
48 lines
1.5 KiB
Diff
|
--- a/networking/inetd.c
|
||
|
+++ b/networking/inetd.c
|
||
|
@@ -1278,6 +1278,7 @@ int inetd_main(int argc UNUSED_PARAM, ch
|
||
|
sep->se_count = 0;
|
||
|
rearm_alarm(); /* will revive it in RETRYTIME sec */
|
||
|
restore_sigmask(&omask);
|
||
|
+ maybe_close(new_udp_fd);
|
||
|
maybe_close(accepted_fd);
|
||
|
continue; /* -> check next fd in fd set */
|
||
|
}
|
||
|
@@ -1298,17 +1299,18 @@ int inetd_main(int argc UNUSED_PARAM, ch
|
||
|
bb_perror_msg("vfork"+1);
|
||
|
sleep(1);
|
||
|
restore_sigmask(&omask);
|
||
|
+ maybe_close(new_udp_fd);
|
||
|
maybe_close(accepted_fd);
|
||
|
continue; /* -> check next fd in fd set */
|
||
|
}
|
||
|
if (pid == 0)
|
||
|
pid--; /* -1: "we did fork and we are child" */
|
||
|
}
|
||
|
- /* if pid == 0 here, we never forked */
|
||
|
+ /* if pid == 0 here, we didn't fork */
|
||
|
|
||
|
if (pid > 0) { /* parent */
|
||
|
if (sep->se_wait) {
|
||
|
- /* tcp wait: we passed listening socket to child,
|
||
|
+ /* wait: we passed socket to child,
|
||
|
* will wait for child to terminate */
|
||
|
sep->se_wait = pid;
|
||
|
remove_fd_from_set(sep->se_fd);
|
||
|
@@ -1345,9 +1347,13 @@ int inetd_main(int argc UNUSED_PARAM, ch
|
||
|
setsid();
|
||
|
/* "nowait" udp */
|
||
|
if (new_udp_fd >= 0) {
|
||
|
- len_and_sockaddr *lsa = xzalloc_lsa(sep->se_family);
|
||
|
+ len_and_sockaddr *lsa;
|
||
|
+ int r;
|
||
|
+
|
||
|
+ close(new_udp_fd);
|
||
|
+ lsa = xzalloc_lsa(sep->se_family);
|
||
|
/* peek at the packet and remember peer addr */
|
||
|
- int r = recvfrom(ctrl, NULL, 0, MSG_PEEK|MSG_DONTWAIT,
|
||
|
+ r = recvfrom(ctrl, NULL, 0, MSG_PEEK|MSG_DONTWAIT,
|
||
|
&lsa->u.sa, &lsa->len);
|
||
|
if (r < 0)
|
||
|
goto do_exit1;
|