> I've tweaked freebsd's fix so that it really ...
... leaks memory! The following diff maybe has a higher probability
of being right...
Index: traceroute.c
===================================================================
RCS file: /cvs/src/usr.sbin/traceroute/traceroute.c,v
retrieving revision 1.67
diff -u -r1.67 traceroute.c
--- traceroute.c 5 Jun 2009 00:10:01 -0000 1.67
+++ traceroute.c 3 Jul 2009 10:40:45 -0000
@@ -608,10 +608,6 @@
send_probe(++seq, ttl, incflag, &to);
while ((cc = wait_for_reply(s, &from, &t1))) {
(void) gettimeofday(&t2, NULL);
- if (t2.tv_sec - t1.tv_sec > waittime) {
- cc = 0;
- break;
- }
i = packet_ok(packet, cc, &from, seq, incflag);
/* Skip short packet */
if (i == 0)
@@ -740,10 +736,9 @@
wait.tv_usec += 1000000;
wait.tv_sec--;
}
- if (wait.tv_sec < 0)
- wait.tv_sec = wait.tv_usec = 0;
- if (select(sock+1, fdsp, (fd_set *)0, (fd_set *)0, &wait) > 0)
+ if (wait.tv_sec >= 0 &&
+ select(sock+1, fdsp, (fd_set *)0, (fd_set *)0, &wait) > 0)
cc = recvfrom(s, (char *)packet, sizeof(packet), 0,
(struct sockaddr *)from, &fromlen);