From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 8542440F21 for ; Fri, 7 Jul 2023 20:05:50 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1842368C70A; Fri, 7 Jul 2023 23:05:48 +0300 (EEST) Received: from iq.passwd.hu (iq.passwd.hu [217.27.212.140]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 204F068C6B8 for ; Fri, 7 Jul 2023 23:05:42 +0300 (EEST) Received: from localhost (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id 6C078E7529 for ; Fri, 7 Jul 2023 22:02:31 +0200 (CEST) X-Virus-Scanned: amavisd-new at passwd.hu Received: from iq.passwd.hu ([127.0.0.1]) by localhost (iq.passwd.hu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id HH1QSwLsJAo6 for ; Fri, 7 Jul 2023 22:02:26 +0200 (CEST) Received: from iq (iq [217.27.212.140]) by iq.passwd.hu (Postfix) with ESMTPS id 7C292E6AB2 for ; Fri, 7 Jul 2023 22:02:26 +0200 (CEST) Date: Fri, 7 Jul 2023 22:02:26 +0200 (CEST) From: Marton Balint To: FFmpeg development discussions and patches In-Reply-To: <20230707102136.16235-1-anton@khirnov.net> Message-ID: <6659e86-e959-9c42-ba13-8e1da890c46@passwd.hu> References: <20230707102136.16235-1-anton@khirnov.net> MIME-Version: 1.0 Subject: Re: [FFmpeg-devel] [PATCH] lavu/random_seed: use getrandom() when available X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: On Fri, 7 Jul 2023, Anton Khirnov wrote: > It is a better interface for /dev/u?random on Linux, which avoids the > issues associated with opening files. getrandom() actually have the same problem as read(). It can read less than requested. So you should use it in a loop in that case or if it returns EINTR. Regards, Marton > --- > 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 > #endif > +#if HAVE_GETRANDOM > +#include > +#endif > #include > #include > #include > @@ -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; > + } > +#else > err = read_random(buf, len, "/dev/urandom"); > +#endif > if (!err) > return err; > > -- > 2.40.1 > > _______________________________________________ > 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". > _______________________________________________ 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".