I don't think using poll on /dev/random is a good idea, here's why:
1. /proc/sys/kernel/random/read_wakeup_threshold is 64 by default [1,2],
but the kernel only considers the pool initialized with >128 bits
[3]. So in an early userspace you're likely to be reading from an uninitialized
/dev/urandom after waking up from poll if you're not also checking
the entropy count to be >128.
2. /dev/random could be a symlink to /dev/urandom, so the call to poll
would return as soon as possible.
3. The system could only be providing /dev/urandom.
So if you're going to have to check the entropy count anyway, a less
convoluted approach would be to repeatedly retrieve it via the
RNDGETENTCNT ioctl [1] on a /dev/urandom file descriptor and sleeping
while it hasn't reached >128 bits yet.
Don't take my word for the feasibility of this fallback method as I'm
not a cryptographer or implementer of cryptographic interfaces. Instead,
consider BoringSSL (Adam Langley et al.) that does almost the same in
its /dev/urandom fallback. [4]
1. /proc/sys/kernel/random/read_wakeup_threshold is 64 by default [1,2], but the kernel only considers the pool initialized with >128 bits [3]. So in an early userspace you're likely to be reading from an uninitialized /dev/urandom after waking up from poll if you're not also checking the entropy count to be >128.
2. /dev/random could be a symlink to /dev/urandom, so the call to poll would return as soon as possible.
3. The system could only be providing /dev/urandom.
So if you're going to have to check the entropy count anyway, a less convoluted approach would be to repeatedly retrieve it via the RNDGETENTCNT ioctl [1] on a /dev/urandom file descriptor and sleeping while it hasn't reached >128 bits yet.
Don't take my word for the feasibility of this fallback method as I'm not a cryptographer or implementer of cryptographic interfaces. Instead, consider BoringSSL (Adam Langley et al.) that does almost the same in its /dev/urandom fallback. [4]
[1]: http://man7.org/linux/man-pages/man4/random.4.html
[2]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...
[3]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...
[4]: https://boringssl.googlesource.com/boringssl/+/refs/heads/ma...