From patchwork Sun Jul 9 10:06:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 42554 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6da1:b0:131:a7d0:bc6d with SMTP id gl33csp33441pzb; Sun, 9 Jul 2023 03:07:06 -0700 (PDT) X-Google-Smtp-Source: APBJJlG+3KKGzSwUkUJ7E7NMXM7AxgVyPMLrffqof3qA8ogUEdHtvwEzunBP4s6JbKmZ3+sQU1sq X-Received: by 2002:a17:906:72cb:b0:993:fe68:5696 with SMTP id m11-20020a17090672cb00b00993fe685696mr1147523ejl.13.1688897225783; Sun, 09 Jul 2023 03:07:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688897225; cv=none; d=google.com; s=arc-20160816; b=G0VD0jSL4EmBzejPl9o2rALbGeBRP0ks3abpOvLZMQp3YIXrGcG+N8xOClknQisNxc BbQm5GO19af7mANnRLe4KGGhR6VwTcO+BpSxdcs1ywHkXsZntWl4aiA97xRQUds9VBAW V5ADZYCTmU1lp4d3TDv4lvSfoNzpkkA/sSFxHmFrknPZEvVH4qtTjM9PIfvGvTNxxApb dX+oGn4p0KmNJ2NdlJyRIR+8MVbUirqVdYqYnMUy6qIiU2D5obHl7G6S4GbeXRd+AFJ7 x0EL+pY5PGlK2aInz7NHBEZVXMUJ4TJs1SpsvjxZVjZWYWeVbNr2/701hm6B+V+u6bzP 2D4w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=VamlBp7ntb58ANIzMgfHSF5P4malIOH7/6sZzGliVLg=; fh=8ZF2QtiKOjBtyn9wuO2cMeZaLsE4aq02Bq77gGK61E8=; b=F/SuLtKzRPavBB/AEE/oF9zz+LriX9bvPG2PCl8nL+gzZv9LfkI1w8VQmywZML34nr qkHRsuo0Y53QSHx49/D10uEyYwBLgbQ04Hxc/w0FjU0RoqBYD8KNrQiJzrm2ukvbvoqn IDzztL2aBvlJiQXRMAwA4L8SAPF2fcSt04uOQsuzxj4Vx0xJ6cKoqg4qwZXUgqP9TJHP M7Sfs7DrBPDMsZPF6/fyi6zBPx8Rpj/K0Tn1tOOjDev0vcHuLdYZXyKJxfrP1bfWXzEl 7qvne4wlpub3jwBC/JWn9lbjITS9fX/U0m38c3xE+FCe7paaQkO8LocNRaxo8pAaCJfL Do/A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id p24-20020a1709061b5800b00992e23f0e6asi5518989ejg.822.2023.07.09.03.07.05; Sun, 09 Jul 2023 03:07:05 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9F87368C5C8; Sun, 9 Jul 2023 13:07:02 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 14EDC68C5AF for ; Sun, 9 Jul 2023 13:06:56 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id BD5432404EC for ; Sun, 9 Jul 2023 12:06:55 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id Cx9ZU0EY3I_9 for ; Sun, 9 Jul 2023 12:06:55 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 10C612404EA for ; Sun, 9 Jul 2023 12:06:55 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id C07B83A0153 for ; Sun, 9 Jul 2023 12:06:54 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 9 Jul 2023 12:06:53 +0200 Message-Id: <20230709100653.17091-1-anton@khirnov.net> X-Mailer: git-send-email 2.40.1 In-Reply-To: <61f9e34f-2cae-d4d1-7164-1b8171c5d20d@gmail.com> References: <61f9e34f-2cae-d4d1-7164-1b8171c5d20d@gmail.com> MIME-Version: 1.0 Subject: [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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: o18cPVu3NO/8 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 | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/configure b/configure index 0ab0761011..f8c809e491 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 f167b172f2..92bf9ef8e1 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,18 @@ 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); + if (read < 0) + return errno == EAGAIN ? AVERROR_EXTERNAL : AVERROR(errno); + return read != len ? AVERROR_UNKNOWN : 0; + } +#else err = read_random(buf, len, "/dev/urandom"); +#endif if (!err) return err;