Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: James Almer <jamrial@gmail.com>
To: ffmpeg-devel@ffmpeg.org
Subject: Re: [FFmpeg-devel] [PATCH] lavu/random_seed: use getrandom() when available
Date: Fri, 7 Jul 2023 08:54:05 -0300
Message-ID: <61f9e34f-2cae-d4d1-7164-1b8171c5d20d@gmail.com> (raw)
In-Reply-To: <20230707102136.16235-1-anton@khirnov.net>

On 7/7/2023 7:21 AM, Anton Khirnov wrote:
> It is a better interface for /dev/u?random on Linux, which avoids the
> issues associated with opening files.
> ---
>   configure               |  2 ++
>   libavutil/random_seed.c | 15 +++++++++++++++
>   2 files changed, 17 insertions(+)
> 
> diff --git a/configure b/configure
> index d6e78297fe..a4b09577cf 100755
> --- a/configure
> +++ b/configure
> @@ -2310,6 +2310,7 @@ SYSTEM_FUNCS="
>       getauxval
>       getenv
>       gethrtime
> +    getrandom
>       getopt
>       GetModuleHandle
>       GetProcessAffinityMask
> @@ -6387,6 +6388,7 @@ check_func  fcntl
>   check_func  fork
>   check_func  gethrtime
>   check_func  getopt
> +check_func_headers "sys/random.h" getrandom
>   check_func  getrusage
>   check_func  gettimeofday
>   check_func  isatty
> diff --git a/libavutil/random_seed.c b/libavutil/random_seed.c
> index 2980e565e0..9a3a5aa133 100644
> --- a/libavutil/random_seed.c
> +++ b/libavutil/random_seed.c
> @@ -35,6 +35,9 @@
>   #elif CONFIG_OPENSSL
>   #include <openssl/rand.h>
>   #endif
> +#if HAVE_GETRANDOM
> +#include <sys/random.h>
> +#endif
>   #include <fcntl.h>
>   #include <math.h>
>   #include <time.h>
> @@ -51,6 +54,7 @@
>   #define TEST 0
>   #endif
>   
> +#if !HAVE_GETRANDOM
>   static int read_random(uint8_t *dst, size_t len, const char *file)
>   {
>   #if HAVE_UNISTD_H
> @@ -70,6 +74,7 @@ static int read_random(uint8_t *dst, size_t len, const char *file)
>       return AVERROR(ENOSYS);
>   #endif
>   }
> +#endif
>   
>   static uint32_t get_generic_seed(void)
>   {
> @@ -147,7 +152,17 @@ int av_random_bytes(uint8_t* buf, size_t len)
>       return 0;
>   #endif
>   
> +    // getrandom() is a better interface for /dev/(u)random on Linux,
> +    // so it makes no sense to try both
> +#if HAVE_GETRANDOM
> +    {
> +        ssize_t read = getrandom(buf, len, GRND_NONBLOCK);
> +        err = read < 0    ? AVERROR(errno)  :
> +              read != len ? AVERROR_UNKNOWN : 0;

The documentation states

"By default, when reading from the random source, getrandom() blocks if 
no random bytes are available, and when reading from the urandom source, 
it blocks if the entropy pool has not yet been initialized.If the 
GRND_NONBLOCK flag is set, then getrandom() does not block in these 
cases, but instead immediately returns -1 with errno set to EAGAIN."

Returning EAGAIN may end up clashing with our usage of said error value 
internally (Marton's patch will make use of this function in hls), so 
maybe prevent said value from propagating here.

LGTM otherwise.

> +    }
> +#else
>       err = read_random(buf, len, "/dev/urandom");
> +#endif
>       if (!err)
>           return err;
>   
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

  reply	other threads:[~2023-07-07 11:54 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-07 10:21 Anton Khirnov
2023-07-07 11:54 ` James Almer [this message]
2023-07-09 10:06   ` Anton Khirnov
2023-07-10 12:15     ` James Almer
2023-07-07 20:02 ` Marton Balint
2023-07-09  9:57   ` Anton Khirnov
2023-07-09 16:23     ` Marton Balint
2023-07-09 16:30       ` James Almer
2023-07-09 16:37         ` Marton Balint

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=61f9e34f-2cae-d4d1-7164-1b8171c5d20d@gmail.com \
    --to=jamrial@gmail.com \
    --cc=ffmpeg-devel@ffmpeg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git