Ok, ping needs a rewrite from the ground up. (This is not a busybox app.)
authorRob Landley <rob@landley.net>
Wed, 11 Jan 2006 03:44:11 +0000 (03:44 -0000)
committerRob Landley <rob@landley.net>
Wed, 11 Jan 2006 03:44:11 +0000 (03:44 -0000)
Fix bug 309, where ping -s 1 localhost would give an elapsed time 9 digits
long due to a stack overflow.  Apparently, iputils also does this.

networking/ping.c

index 646f4ac37e401c2ee75e536ee470bcec5b8845c5..ed52abf048418fd7095ed5e81565b7b621328d47 100644 (file)
@@ -200,7 +200,7 @@ static void sendping(int junk)
 {
        struct icmp *pkt;
        int i;
-       char packet[datalen + 8];
+       char packet[datalen + sizeof(struct icmp)];
 
        pkt = (struct icmp *) packet;
 
@@ -211,7 +211,7 @@ static void sendping(int junk)
        pkt->icmp_id = myid;
        CLR(ntohs(pkt->icmp_seq) % MAX_DUP_CHK);
 
-       gettimeofday((struct timeval *) &packet[8], NULL);
+       gettimeofday((struct timeval *) &pkt->icmp_dun, NULL);
        pkt->icmp_cksum = in_cksum((unsigned short *) pkt, sizeof(packet));
 
        i = sendto(pingsock, packet, sizeof(packet), 0,