Giovanni Giacobbi <giova...@giacobbi.net> [2021-01-30 13:45:21]:

Hi,

> On systems where adding entropy to /dev/random using ioctl(RNDADDENTROPY) is
> not allowed (notably: docker containers), avoid entering a busy loop that
> consumes high cpu, as the poll loop will keep firing.
> 
> Cc: Petr Štetiar <yn...@true.cz>
> ---
>  urngd.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/urngd.c b/urngd.c
> index 35ccdec..410d300 100644
> --- a/urngd.c
> +++ b/urngd.c
> @@ -129,9 +129,14 @@ static size_t gather_entropy(struct urngd *u)
>  static void low_entropy_cb(struct uloop_fd *ufd, unsigned int events)
>  {
>       struct urngd *u = container_of(ufd, struct urngd, rnd_fd);
> +     size_t res;
>  
>       DEBUG(2, DEV_RANDOM " signals low entropy\n");
> -     gather_entropy(u);
> +     res = gather_entropy(u);
> +     if (!res) {
> +             DEBUG(2, "gather_entropy failed, delaying further attempts\n");
> +             sleep(60);
> +     }

this looks like a workaround. That ioctl() call likely returns EPERM error
which should be handled properly, probably by error message "CAP_SYS_ADMIN (or
whatever else) is mandatory for proper operation" followed by a termination of
daemon.  I think, that it makes no sense to keep running in such cases.

Cheers,

Petr

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to