shithub: riscv

Download patch

ref: a54fcac01609be9438f6fb05b4da4be01c303383
parent: 314faec39447f98c0dfd96a91dbd25fd757d106d
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sun Apr 21 09:10:39 EDT 2024

devsdp: fix randomization of dial and acceptid

We where allocating the dialid and acceptid using:

rand()<<16 + rand()

this gives a biased values as rand() retuns a 15-bit
number. Instead, use two calls to nrand() to get
the full 32-bit unsigned range.

--- a/sys/src/9/port/devsdp.c
+++ b/sys/src/9/port/devsdp.c
@@ -964,13 +964,13 @@
 		panic("setstate: bad state: %d", state);
 	case CDial:
 		assert(c->state == CInit);
-		c->dialid = (rand()<<16) + rand();
+		c->dialid = (nrand(1<<16)<<16)|nrand(1<<16);
 		convretryinit(c);
 		convoconnect(c, ConOpenRequest, c->dialid, 0);
 		break;
 	case CAccept:
 		assert(c->state == CInit);
-		c->acceptid = (rand()<<16) + rand();
+		c->acceptid = (nrand(1<<16)<<16)|nrand(1<<16);
 		convretryinit(c);
 		convoconnect(c, ConOpenAck, c->dialid, c->acceptid);
 		break;