Solaris random device

Andreas Pommer apommer@cosy.sbg.ac.at
Thu, 11 May 2000 15:04:11 +0200


On May 10, Lars Hecking wrote:
[..]

> After openssh failed when I upgraded to Solaris 8, I was looking for an
> alternative to egd and found Andreas Maier's random device for Solaris
> (http://www.cosy.sbg.ac.at/~andi/). It seems to work quite nicely with
> openssl/openssh. I can generate keys, make connections, no problem.
[...]
> poll(0xFFBED588, 1, 3000) Err#6 ENXIO
> write(2, " s e l e c t ( ) e r r".., 16) = 16
> write(2, " N o s u c h d e v i".., 25) = 25
> write(2, "\n", 1) = 1
> [repeats over and over]
>
> Any suggestions? Is it possible that the current code is too Linux/BSD
> specific?
the problem occurs in rndlinux.c gather_random() at the select() in line 128: if( !(rc=select(fd+1, &rfds, NULL, NULL, &tv)) ) { this select() translates into poll(), which can be seen in the truss-dump above. However, in the source of Andis random device one can read: * NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE [..] * -) /dev/random and /dev/urandom are the same (no blocking). * -) No ioctls, no poll. * * NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE That seems to be the answer. One possible solution would be to skip the select() if the fact is known that the device does not block. Another one would be to improve the random device (remember, still V0.1), to provide a dummy-poll which succeeds every time. HTH Andreas