$OpenBSD: patch-tools_jumbo6_c,v 1.1 2013/09/26 21:52:35 bluhm Exp $
--- tools/jumbo6.c.orig	Fri Aug 16 07:33:28 2013
+++ tools/jumbo6.c	Sun Sep  8 21:15:17 2013
@@ -246,7 +246,7 @@ int main(int argc, char **argv){
 		exit(1);
 	}
 
-	hoplimit=64+random()%180;
+	hoplimit=64+arc4random_uniform(180);
 	init_iface_data(&idata);
 
 	while((r=getopt_long(argc, argv, shortopts, longopts, NULL)) != -1) {
@@ -807,8 +807,6 @@ int main(int argc, char **argv){
 		exit(1);
 	}
 
-	srandom(time(NULL));
-
 	if(!dstaddr_f && !listen_f){	/* Must specify IPv6 Destination Address if listening mode not used */
 		puts("IPv6 Destination Address not specified (and listening mode not selected)");
 		exit(1);
@@ -1237,14 +1235,12 @@ void init_packet_data(void){
 	icmp6->icmp6_code = 0;
 	icmp6->icmp6_cksum = 0;
 	icmp6->icmp6_data16[0]= htons(getpid());	/* Identifier */
-	icmp6->icmp6_data16[1]= htons(random());	/* Sequence Number */
+	icmp6->icmp6_data16[1]= arc4random();		/* Sequence Number */
 
 	ptr+= sizeof(struct icmp6_hdr);
 
-	for(i=0; i< (icmp6psize/4); i++){
-		*(u_int32_t *)ptr = random();
-		ptr += sizeof(u_int32_t);
-	}
+	arc4random_buf(ptr, icmp6psize);
+	ptr += icmp6psize;
 
 	icmp6->icmp6_cksum = in_chksum(v6buffer, icmp6, ptr-((unsigned char *)icmp6), IPPROTO_ICMPV6);
 
@@ -1304,7 +1300,7 @@ int send_packet(struct pcap_pkthdr *pkthdr, const u_ch
 		/* Copy the Fragmentation Header */
 		memcpy(fptr, (char *) &fraghdr, FRAG_HDR_SIZE);
 		fh= (struct ip6_frag *) fptr;
-		fh->ip6f_ident=random();
+		fh->ip6f_ident=arc4random();
 		startoffragment = fptr + FRAG_HDR_SIZE;
 
 		/*
@@ -1851,7 +1847,7 @@ void randomize_ipv6_addr(struct in6_addr *ipv6addr, st
 		ipv6addr->s6_addr16[i]= 0;
 
 	for(i=startrand; i<8; i++)
-		ipv6addr->s6_addr16[i]=random();
+		ipv6addr->s6_addr16[i]=arc4random();
 
 	if(preflen%16){
 		mask=0xffff;
@@ -1876,8 +1872,7 @@ void randomize_ipv6_addr(struct in6_addr *ipv6addr, st
  */
 
 void randomize_ether_addr(struct ether_addr *ethaddr){
-	for(i=0; i<6; i++)
-		ethaddr->a[i]= random();
+	arc4random_buf(ethaddr, sizeof(struct ether_addr));
 
 	ethaddr->a[0]= (ethaddr->a[0] & 0xfc) | 0x02;
 }
