On Tue, Jul 12, 2016 at 01:09:42PM -0400, Michael Conrad wrote:
> On 7/7/2016 11:49 AM, Rob Landley wrote:
> >On 07/06/2016 11:41 AM, Etienne Champetier wrote:
> >>>Now you really hate the fact that getrandom() is a syscall.
> >I do not hate the fact getrandom is a syscall. I'm asking what the point
> >is of a new applet to call this syscall. You have suggested it could
> >block to show when /dev/urandom is producing a higher grade of
> >randomness than it does before being properly seeded. That is, as far as
> >I can tell, the only reason for your new applet to exist rather than
> >upgrading $RANDOM in ash/hush.
> >
> Actually in my opinion the syscall is inferior to a new character
> device, because blocking syscalls interfere with event-driven
> programming.
> 
> Suppose you want to write a single-thread event-driven web server
> which initializes its SSL library with this randomness source (i.e.
> won't allow SSL until enough entropy is collected for a good
> initialization) but you still want it to be able to accept non-SSL
> connections.  In order to use the syscall you need a thread, or
> child process.  (haha, such as pipe to a "getrandom" applet...)

Thanks for contributing your ideas about what color the bikeshed
should be, but getrandom's already got you covered. Until your csPRNG
is initialized, just call getrandom with the GRND_NONBLOCK once each
time you get any event (i.e. each time poll() returns). There's no
need to busy-wait or periodically check with timeouts since you don't
need the results until there's an event to act on, anyway.

There are very good reasons it's a syscall rather than a device: many
use cases require a never-fails entropy source, and with the device
node approach they're vulnerable to fd-exhaustion attacks. Most
existing bad code, when faced with such a situation, falls back to
some completely insecure seed like time(). The only reliable way to
prevent such idiocy was to provide an interface that can't fail.

Rich
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to