Patch from KRONSTORFER Horst to Fix a size mismatch in ping, such as the 56/84
authorRob Landley <rob@landley.net>
Sat, 1 Apr 2006 17:28:11 +0000 (17:28 -0000)
committerRob Landley <rob@landley.net>
Sat, 1 Apr 2006 17:28:11 +0000 (17:28 -0000)
mismatch inthe following example:
  # ping -c 1 172.16.2.1
  PING 172.16.2.1 (172.16.2.1): 56 data bytes
  84 bytes from 172.16.2.1: icmp_seq=0 ttl=64 time=0.2 ms

networking/ping.c
networking/ping6.c

index d33cb358fc77fb1c3bd2c167f3f9123bc1918048..7fe52ab39e005408bdcf8afcf46ebfe329554a0a 100644 (file)
@@ -108,7 +108,7 @@ static void ping(const char *host)
        pkt->icmp_type = ICMP_ECHO;
        pkt->icmp_cksum = in_cksum((unsigned short *) pkt, sizeof(packet));
 
-       c = sendto(pingsock, packet, sizeof(packet), 0,
+       c = sendto(pingsock, packet, DEFDATALEN + ICMP_MINLEN, 0,
                           (struct sockaddr *) &pingaddr, sizeof(struct sockaddr_in));
 
        if (c < 0 || c != sizeof(packet))
@@ -202,7 +202,7 @@ static void sendping(int junk)
 {
        struct icmp *pkt;
        int i;
-       char packet[datalen + sizeof(struct icmp)];
+       char packet[datalen + ICMP_MINLEN];
 
        pkt = (struct icmp *) packet;
 
index 4e55081fba5fc4acdcf6eccead428975529e2c60..3f632e06050f15d526da1a60f5b0f678870fb709 100644 (file)
@@ -111,7 +111,7 @@ static void ping(const char *host)
        setsockopt(pingsock, SOL_RAW, IPV6_CHECKSUM, (char *) &sockopt,
                           sizeof(sockopt));
 
-       c = sendto(pingsock, packet, sizeof(packet), 0,
+       c = sendto(pingsock, packet, DEFDATALEN + sizeof (struct icmp6_hdr), 0,
                           (struct sockaddr *) &pingaddr, sizeof(struct sockaddr_in6));
 
        if (c < 0 || c != sizeof(packet))
@@ -204,7 +204,7 @@ static void sendping(int junk)
 {
        struct icmp6_hdr *pkt;
        int i;
-       char packet[datalen + 8];
+       char packet[datalen + sizeof (struct icmp6_hdr)];
 
        pkt = (struct icmp6_hdr *) packet;