> 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);

Reply via email to