From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id AD114313527; Wed, 28 Jan 2026 17:33:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769621606; cv=none; b=GSrwAiFFfaStVk9o1hvClOIM4QykZ9mVA/8bfcftoxGCksB41OsuqKJyOZ9eK/vXtM42iQiUJ1Z44h2B+iyGHuxeLZEdA2HX/vdl1g+ZysOXvdrvHMss0WG3P9S3XweZ4NmSqb0ez+MwCD5xi9xqm2LgJN4Bs+mq42OSd0FXK2A= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769621606; c=relaxed/simple; bh=N8Xf6iF1gZpji7o6pTipZRVaUHG2I6YU1WVvIdOJGPE=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=cqLoNa0oo8AyjYGq2LZC6AZuNNW/Dx9Dxps3S8EhHy9y1QT2PrJeJKjrZJmEFNFgrMX8FDJe1qALZTgpEnuH/j5muHnBCqPLXgsHqPdqUQP123Yfgx+ZseQA7eja2lGPRiAxZ0WjuJH76fU+sAKGLtlbihgS8q7/53r58Kazbqk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 64D841516; Wed, 28 Jan 2026 09:33:17 -0800 (PST) Received: from [10.1.36.159] (unknown [10.1.36.159]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 800BC3F632; Wed, 28 Jan 2026 09:33:20 -0800 (PST) Message-ID: <670c2b78-02e2-4617-80d9-3c896077f02a@arm.com> Date: Wed, 28 Jan 2026 17:33:19 +0000 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 2/3] prandom: Add __always_inline version of prandom_u32_state() Content-Language: en-GB To: "Jason A. Donenfeld" Cc: Catalin Marinas , Will Deacon , Huacai Chen , Madhavan Srinivasan , Michael Ellerman , Paul Walmsley , Palmer Dabbelt , Albert Ou , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , Kees Cook , "Gustavo A. R. Silva" , Arnd Bergmann , Mark Rutland , Ard Biesheuvel , Jeremy Linton , David Laight , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, loongarch@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, linux-hardening@vger.kernel.org References: <20260119130122.1283821-1-ryan.roberts@arm.com> <20260119130122.1283821-3-ryan.roberts@arm.com> From: Ryan Roberts In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 28/01/2026 17:00, Jason A. Donenfeld wrote: > On Mon, Jan 19, 2026 at 01:01:09PM +0000, Ryan Roberts wrote: >> We will shortly use prandom_u32_state() to implement kstack offset >> randomization and some arches need to call it from non-instrumentable >> context. So let's implement prandom_u32_state() as an out-of-line >> wrapper around a new __always_inline prandom_u32_state_inline(). kstack >> offset randomization will use this new version. >> >> Acked-by: Mark Rutland >> Signed-off-by: Ryan Roberts >> --- >> include/linux/prandom.h | 20 ++++++++++++++++++++ >> lib/random32.c | 8 +------- >> 2 files changed, 21 insertions(+), 7 deletions(-) >> >> diff --git a/include/linux/prandom.h b/include/linux/prandom.h >> index ff7dcc3fa105..801188680a29 100644 >> --- a/include/linux/prandom.h >> +++ b/include/linux/prandom.h >> @@ -17,6 +17,26 @@ struct rnd_state { >> __u32 s1, s2, s3, s4; >> }; >> >> +/** >> + * prandom_u32_state_inline - seeded pseudo-random number generator. >> + * @state: pointer to state structure holding seeded state. >> + * >> + * This is used for pseudo-randomness with no outside seeding. >> + * For more random results, use get_random_u32(). >> + * For use only where the out-of-line version, prandom_u32_state(), cannot be >> + * used (e.g. noinstr code). >> + */ >> +static __always_inline u32 prandom_u32_state_inline(struct rnd_state *state) > > This is pretty bikesheddy and I'm not really entirely convinced that my > intuition is correct here, but I thought I should at least ask. Do you > think this would be better called __prandom_u32_state(), where the "__" > is kind of a, "don't use this directly unless you know what you're doing > because it's sort of internal"? It seems like either we make this inline > for everybody, or if there's a good reason for having most users use the > non-inline version, then we should be careful that new users don't use > the inline version. I was thinking the __ would help with that. I'm certainly happy to do that, if that's your preference. I have to respin this anyway, given the noinstr issue. > > Jason