From patchwork Fri Jul 7 10:21:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 42497 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3b1e:b0:12b:9ae3:586d with SMTP id c30csp7178665pzh; Fri, 7 Jul 2023 03:21:52 -0700 (PDT) X-Google-Smtp-Source: APBJJlGLG5kCLRMx1/ChgdrIO1Bl9Ak3niCpwbxYhdP6V72AdLzttC/PT/aiQvwlOKeEAqzUwFIP X-Received: by 2002:a17:906:83:b0:992:a2fe:757e with SMTP id 3-20020a170906008300b00992a2fe757emr3412217ejc.31.1688725312171; Fri, 07 Jul 2023 03:21:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688725312; cv=none; d=google.com; s=arc-20160816; b=Eiihxh45cFcVDrmDsHG5Loi9clpxZYeOpZ9r34XMPtJBK5GE+FDm3cNfabk+NPN/MB w9FQjIM9HCQV1lBUb+74jl+Xf+Ug9HPsaaANyeV2vX9VbVsoDYpslL4bdljq4KlmZ0+5 t11HfcXqbWX6oUvjTnEW3gR74WUz8UBPzMmy2Kuu7SAVtIktl2SfoK0LlKs94p5sB9Kg WRwT7AiACAmPHC2KbzqP3WP/aHaYBN0jpmFRc0pckoi2g6gorLai+rBv8BSOuAWw2Npl s8TGzMX88dS8wj+li3/BzSsyeCuPbOo99uZTZntIayWxsyTmGytQWg8sF4gjA58jOtMn 1gjQ== 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:message-id:date:to:from :delivered-to; bh=xoSa+vxtZFtIGGnnh1YLMh4X0TtSIvZc0sixhlePZfs=; fh=8ZF2QtiKOjBtyn9wuO2cMeZaLsE4aq02Bq77gGK61E8=; b=fTVHdVW8VW9zHkulEToYqFxumnw2gJqlZWybmuQ/XbkqleaDU/R9YsIogHVuAu0Zdn 02KQYCJx59REIYNKvJeS1hNcMxTBQ3hhJrltGA3w+GcshTfkvqzqGSCmiRB+8Ted9qA4 ViZbghFjU4SomNadE/e+ehRSax9KAOLf8yXllytsKdYhh6IQpqM1D3jMsNpEWuQqJ3p8 4Rl7mL/r1p1jNNRfHLIHLqARX6WcgQ2MecwzwU60E+J3LKJRzgQIOoF6b71JsYP4pfNv xxS6nt+dC4Q+/fmO3m30SaG9g8rmJ7GB8QbYWjBTRlYrkl67N/fjkMoHFqHP0kG9s9C0 MIXg== 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 g23-20020a170906349700b00992d0de8766si1923750ejb.913.2023.07.07.03.21.51; Fri, 07 Jul 2023 03:21:52 -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 D509668C7CD; Fri, 7 Jul 2023 13:21:48 +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 E0F1468C156 for ; Fri, 7 Jul 2023 13:21:41 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id A5A542404EC for ; Fri, 7 Jul 2023 12:21:41 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id fuJpbfXSxVxm for ; Fri, 7 Jul 2023 12:21:40 +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 E38482404EA for ; Fri, 7 Jul 2023 12:21:40 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id A106C3A0153 for ; Fri, 7 Jul 2023 12:21:40 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 7 Jul 2023 12:21:36 +0200 Message-Id: <20230707102136.16235-1-anton@khirnov.net> X-Mailer: git-send-email 2.40.1 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: 3IpxOWlTFvkV 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 #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;