use arc4random for xid generation
authorderaadt <deraadt@openbsd.org>
Thu, 2 Jan 1997 09:21:01 +0000 (09:21 +0000)
committerderaadt <deraadt@openbsd.org>
Thu, 2 Jan 1997 09:21:01 +0000 (09:21 +0000)
lib/libc/rpc/clnt_tcp.c
lib/libc/rpc/clnt_udp.c
lib/libc/rpc/pmap_rmt.c

index 3cc3322..f23e97a 100644 (file)
@@ -28,7 +28,7 @@
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static char *rcsid = "$OpenBSD: clnt_tcp.c,v 1.11 1996/12/10 07:46:37 deraadt Exp $";
+static char *rcsid = "$OpenBSD: clnt_tcp.c,v 1.12 1997/01/02 09:21:01 deraadt Exp $";
 #endif /* LIBC_SCCS and not lint */
  
 /*
@@ -119,10 +119,6 @@ clnttcp_create(raddr, prog, vers, sockp, sendsz, recvsz)
        register struct ct_data *ct;
        struct timeval now;
        struct rpc_msg call_msg;
-       static u_int32_t disrupt;
-
-       if (disrupt == 0)
-               disrupt = (u_int32_t)(long)raddr;
 
        h  = (CLIENT *)mem_alloc(sizeof(*h));
        if (h == NULL) {
@@ -184,7 +180,7 @@ clnttcp_create(raddr, prog, vers, sockp, sendsz, recvsz)
         * Initialize call message
         */
        (void)gettimeofday(&now, (struct timezone *)0);
-       call_msg.rm_xid = (++disrupt) ^ getpid() ^ now.tv_sec ^ now.tv_usec;
+       call_msg.rm_xid = arc4random();
        call_msg.rm_direction = CALL;
        call_msg.rm_call.cb_rpcvers = RPC_MSG_VERSION;
        call_msg.rm_call.cb_prog = prog;
index 796c9bf..5fbd082 100644 (file)
@@ -28,7 +28,7 @@
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static char *rcsid = "$OpenBSD: clnt_udp.c,v 1.9 1996/11/14 06:51:48 etheisen Exp $";
+static char *rcsid = "$OpenBSD: clnt_udp.c,v 1.10 1997/01/02 09:21:05 deraadt Exp $";
 #endif /* LIBC_SCCS and not lint */
 
 /*
@@ -115,10 +115,6 @@ clntudp_bufcreate(raddr, program, version, wait, sockp, sendsz, recvsz)
        register struct cu_data *cu;
        struct timeval now;
        struct rpc_msg call_msg;
-       static u_int32_t disrupt;
-
-       if (disrupt == 0)
-               disrupt = (u_int32_t)(long)raddr;
 
        cl = (CLIENT *)mem_alloc(sizeof(CLIENT));
        if (cl == NULL) {
@@ -156,7 +152,7 @@ clntudp_bufcreate(raddr, program, version, wait, sockp, sendsz, recvsz)
        cu->cu_total.tv_usec = -1;
        cu->cu_sendsz = sendsz;
        cu->cu_recvsz = recvsz;
-       call_msg.rm_xid = (++disrupt) ^ getpid() ^ now.tv_sec ^ now.tv_usec;
+       call_msg.rm_xid = arc4random();
        call_msg.rm_direction = CALL;
        call_msg.rm_call.cb_rpcvers = RPC_MSG_VERSION;
        call_msg.rm_call.cb_prog = program;
index 00c0254..976721e 100644 (file)
@@ -28,7 +28,7 @@
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static char *rcsid = "$OpenBSD: pmap_rmt.c,v 1.12 1996/12/10 07:46:43 deraadt Exp $";
+static char *rcsid = "$OpenBSD: pmap_rmt.c,v 1.13 1997/01/02 09:21:07 deraadt Exp $";
 #endif /* LIBC_SCCS and not lint */
 
 /*
@@ -240,10 +240,6 @@ clnt_broadcast(prog, vers, proc, xargs, argsp, xresults, resultsp, eachresult)
        struct rpc_msg msg;
        struct timeval t; 
        char outbuf[MAX_BROADCAST_SIZE], inbuf[UDPMSGSIZE];
-       static u_int32_t disrupt;
-
-       if (disrupt == 0)
-               disrupt = (u_int32_t)(long)resultsp;
 
        /*
         * initialization: create a socket, a broadcast address, and
@@ -282,7 +278,7 @@ clnt_broadcast(prog, vers, proc, xargs, argsp, xresults, resultsp, eachresult)
        baddr.sin_port = htons(PMAPPORT);
        baddr.sin_addr.s_addr = htonl(INADDR_ANY);
        (void)gettimeofday(&t, (struct timezone *)0);
-       msg.rm_xid = xid = (++disrupt) ^ getpid() ^ t.tv_sec ^ t.tv_usec;
+       msg.rm_xid = xid = arc4random();
        t.tv_usec = 0;
        msg.rm_direction = CALL;
        msg.rm_call.cb_rpcvers = RPC_MSG_VERSION;