$OpenBSD: patch-tools_ni6_c,v 1.1 2013/09/26 21:52:36 bluhm Exp $
--- tools/ni6.c.orig	Thu Aug 22 11:40:01 2013
+++ tools/ni6.c	Sun Sep  8 21:24:43 2013
@@ -294,8 +294,7 @@ int main(int argc, char **argv){
 		exit(1);
 	}
 
-	srandom(time(NULL));
-	hoplimit=64+random()%180;
+	hoplimit=64+arc4random_uniform(180);
 
 	if(init_iface_data(&idata) == -1){
 		puts("Error initializing internal data structure");
@@ -2151,10 +2150,8 @@ int send_packet(const u_char *pktdata, struct pcap_pkt
 					bzero(ptr, 4);
 					ptr+= 4;
 
-					for(i=0; i<payloadsize; i++){
-						*ptr= (unsigned char) random();
-						ptr++;
-					}
+					arc4random_buf(ptr, payloadsize);
+					ptr += payloadsize;
 				}
 
 				break;
@@ -2179,10 +2176,8 @@ int send_packet(const u_char *pktdata, struct pcap_pkt
 							return(-1);
 					}
 
-					for(i=0; i<payloadsize; i++){
-						*ptr= (unsigned char) random();
-						ptr++;
-					}
+					arc4random_buf(ptr, payloadsize);
+					ptr += payloadsize;
 				}
 				break;
 
@@ -2206,10 +2201,8 @@ int send_packet(const u_char *pktdata, struct pcap_pkt
 							return(-1);
 					}
 
-					for(i=0; i<payloadsize; i++){
-						*ptr= (unsigned char) random();
-						ptr++;
-					}
+					arc4random_buf(ptr, payloadsize);
+					ptr += payloadsize;
 				}
 				break;
 
@@ -2226,8 +2219,7 @@ int send_packet(const u_char *pktdata, struct pcap_pkt
 		ni->ni_qtype= htons(qtype);
 		ni->ni_flags= htons(flags);
 
-		for(i=0; i<8; i++)
-			ni->icmp6_ni_nonce[i]= random();
+		arc4random_buf(ni->icmp6_ni_nonce, 8);
 
 		ptr= ptr + sizeof(struct icmp6_nodeinfo);
 
@@ -2351,10 +2343,8 @@ int send_packet(const u_char *pktdata, struct pcap_pkt
 					return(-1);
 			}
 
-			for(i=0; i<payloadsize; i++){
-				*ptr= (unsigned char) random();
-				ptr++;
-			}
+			arc4random_buf(ptr, payloadsize);
+			ptr += payloadsize;
 		}
 		else if(sloopattack_f){
 			if((ptr+(slsize+4)) > (v6buffer+max_packet_size)){
@@ -2403,7 +2393,7 @@ int send_packet(const u_char *pktdata, struct pcap_pkt
 
 		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;
 
 		/*
@@ -3098,7 +3088,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;
@@ -3123,8 +3113,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;
 }
@@ -4017,7 +4006,7 @@ int send_neighbor_advert(struct iface_data *idata, pca
 
 		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;
 
 		/*
