Apply by doing
       cd /usr/src/sbin/ping
       patch -p0 < ping.patch

And then rebuild ping

Index: ping.c
===================================================================
RCS file: /cvs/src/sbin/ping/ping.c,v
retrieving revision 1.35
retrieving revision 1.37
diff -u -r1.35 -r1.37
--- ping.c      1998/05/17 01:46:51     1.35
+++ ping.c      1999/02/23 20:04:37     1.37
@@ -47,7 +47,7 @@
#if 0
static char sccsid[] = "@(#)ping.c     8.1 (Berkeley) 6/5/93";
#else
-static char rcsid[] = "$OpenBSD: ping.c,v 1.35 1998/05/17 01:46:51 angelos Exp $";
+static char rcsid[] = "$OpenBSD: ping.c,v 1.37 1999/02/23 20:04:37 kjell Exp $";
#endif
#endif /* not lint */

@@ -99,7 +99,7 @@
#define        DEFDATALEN      (64 - 8)                /* default data length */
#define        MAXIPLEN        60
#define        MAXICMPLEN      76
-#define        MAXPACKET       (65536 - 60 - 8)        /* max packet size */
+#define        MAXPAYLOAD      (IP_MAXPACKET - MAXIPLEN - 8) /* max ICMP payload size */
#define        MAXWAIT_DEFAULT 10                      /* secs to wait for response */
#define        NROUTES         9                       /* number of record route slots */

@@ -143,7 +143,7 @@
struct sockaddr_in whence;             /* Which interface we come from */
int datalen = DEFDATALEN;
int s;                         /* socket file descriptor */
-u_char outpackhdr[MAXPACKET];
+u_char outpackhdr[IP_MAXPACKET]; /* Max packet size = 65535 */
u_char *outpack = outpackhdr+sizeof(struct ip);
char BSPACE = '\b';            /* characters written for flood */
char DOT = '.';
@@ -217,7 +217,7 @@
       while ((ch = getopt(argc, argv, "DI:LRS:c:dfh:i:l:np:qrs:T:t:vw:")) != -1)
               switch(ch) {
               case 'c':
-                       npackets = strtol(optarg, 0, NULL);
+                       npackets = strtol(optarg, NULL, 0);
                       if (npackets <= 0)
                               errx(1, "bad number of packets to transmit: %s",
                                   optarg);
@@ -282,7 +282,7 @@
                       datalen = strtol(optarg, NULL, 0);
                       if (datalen <= 0)
                               errx(1, "bad packet size: %s", optarg);
-                       if (datalen > MAXPACKET)
+                       if (datalen > MAXPAYLOAD)
                               errx(1, "packet size too large: %s", optarg);
                       break;
               case 'T':
@@ -1227,7 +1227,7 @@

       if (ii > 0)
               for (kk = 0;
-                   kk <= MAXPACKET - (8 + sizeof(struct tvi) + ii);
+                   kk <= MAXPAYLOAD - (8 + sizeof(struct tvi) + ii);
                   kk += ii)
                       for (jj = 0; jj < ii; ++jj)
                               bp[jj + kk] = pat[jj];