diff -urN 2.0.38/net/ipv4/ip_output.c 2.0.38-ping-R/net/ipv4/ip_output.c --- 2.0.38/net/ipv4/ip_output.c Thu Jun 18 23:48:22 1998 +++ 2.0.38-ping-R/net/ipv4/ip_output.c Tue Dec 14 23:02:43 1999 @@ -703,7 +703,13 @@ if (!sk->ip_hdrincl) { length += sizeof(struct iphdr); - if(opt) length += opt->optlen; + if(opt) + { + /* make sure to not exceed the max packet size */ + if (0xffff-length < opt->optlen) + return -EMSGSIZE; + length += opt->optlen; + } } if(length <= dev->mtu && !MULTICAST(daddr) && daddr!=0xFFFFFFFF && daddr!=dev->pa_brdaddr)