From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 31203C2D0C0 for ; Mon, 23 Dec 2019 08:21:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0925B207FF for ; Mon, 23 Dec 2019 08:21:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1577089270; bh=XeFchNmcZbVFLTtXDEHSwMt1Lj3xsRNy7aafhPPE0z4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=AtM4zdRxm2MbJO068vfYkLZRQjFk9fdUTudC3DnKTGI9LI9p5tvPs6lOASFPAr4jF F+avpBpV7k8fpxr21TYlSN3VPCvgfcmysrSNUBxn1LoVMNuHP9DzpwVmf4OCETZhR9 xORVitd7rUcPTb58APzvd4XS63flwa5/O39MR1F8= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726664AbfLWIVH (ORCPT ); Mon, 23 Dec 2019 03:21:07 -0500 Received: from mail.kernel.org ([198.145.29.99]:38684 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725855AbfLWIVF (ORCPT ); Mon, 23 Dec 2019 03:21:05 -0500 Received: from localhost (36-236-5-169.dynamic-ip.hinet.net [36.236.5.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 89E3520715; Mon, 23 Dec 2019 08:21:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1577089265; bh=XeFchNmcZbVFLTtXDEHSwMt1Lj3xsRNy7aafhPPE0z4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=xkiXLYCKS8ogBXsb7jvhMKmp3BCxIBxS0e3TpXACkT7lZonNTgQUgMuaO9OXvrzF7 j8oGlGiWxKUQtKZfzv2qOTqOrfa/K31DVSDq11rL6kaHaBWfxECCMTeT9y3UtITqvf ByBhlDIIFoFBCZgcwQlq18VV+2Z8NYJwCd1ObSfc= From: Andy Lutomirski To: Ted Ts'o Cc: LKML , Linux API , Kees Cook , "Jason A. Donenfeld" , "Ahmed S. Darwish" , Lennart Poettering , "Eric W. Biederman" , "Alexander E. Patrakov" , Michael Kerrisk , Willy Tarreau , Matthew Garrett , Ext4 Developers List , linux-man , Stephan Mueller , Andy Lutomirski Subject: [PATCH v3 2/8] random: Add a urandom_read_nowait() for random APIs that don't warn Date: Mon, 23 Dec 2019 00:20:45 -0800 Message-Id: X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org /dev/random and getrandom() never warn. Split the meat of urandom_read() into urandom_read_nowarn() and leave the warning code in urandom_read(). This has no effect on kernel behavior, but it makes subsequent patches more straightforward. It also makes the fact that getrandom() never warns more obvious. Signed-off-by: Andy Lutomirski --- drivers/char/random.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/drivers/char/random.c b/drivers/char/random.c index c6252a3a4aec..7b46751772e5 100644 --- a/drivers/char/random.c +++ b/drivers/char/random.c @@ -2018,12 +2018,23 @@ random_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos) return _random_read(file->f_flags & O_NONBLOCK, buf, nbytes); } +static ssize_t +urandom_read_nowarn(struct file *file, char __user *buf, size_t nbytes, + loff_t *ppos) +{ + int ret; + + nbytes = min_t(size_t, nbytes, INT_MAX >> (ENTROPY_SHIFT + 3)); + ret = extract_crng_user(buf, nbytes); + trace_urandom_read(8 * nbytes, 0, ENTROPY_BITS(&input_pool)); + return ret; +} + static ssize_t urandom_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos) { unsigned long flags; static int maxwarn = 10; - int ret; if (!crng_ready() && maxwarn > 0) { maxwarn--; @@ -2035,10 +2046,8 @@ urandom_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos) crng_init_cnt = 0; spin_unlock_irqrestore(&primary_crng.lock, flags); } - nbytes = min_t(size_t, nbytes, INT_MAX >> (ENTROPY_SHIFT + 3)); - ret = extract_crng_user(buf, nbytes); - trace_urandom_read(8 * nbytes, 0, ENTROPY_BITS(&input_pool)); - return ret; + + return urandom_read_nowarn(file, buf, nbytes, ppos); } static __poll_t @@ -2200,7 +2209,7 @@ SYSCALL_DEFINE3(getrandom, char __user *, buf, size_t, count, if (unlikely(ret)) return ret; } - return urandom_read(NULL, buf, count, NULL); + return urandom_read_nowarn(NULL, buf, count, NULL); } /******************************************************************** -- 2.23.0