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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 27F0FC43334 for ; Wed, 8 Jun 2022 08:27:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=3H7lxoMASIOrseLHtchd4TJW/qIMVxK5M0dLGtTSl4g=; b=Cjt3KiF5a3MBJx WcSToye6Z5UUARKdxSwIddBH17+KvdiDUnr2XECs3ayaf2pXULxv6D0py49exSCMlD47taxYtSIgv 9WRZ0Tyz3O11uTF4aQXr1Z+RK8IZrtYiANHvqyB1oDdpMWod+yjbz9DkUqxozKO656x+1DLYzzBWh +B3p6XIWyIdQniPZsLDRjnsjNeTH+vuOxXadEyE5EqmoAErBb/RJKPjccGFLajiwtEEolYLutN/aL JU6mt12qNnjtxAxxRancjKKHQLquc160ARRnTRmNpk+PbEqBO2taR+fW3pYBoLlCtRZDNyI/XKE7F PfMaqAfSJC3KawG5f3LQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nyr0v-00Bx55-Fy; Wed, 08 Jun 2022 08:26:07 +0000 Received: from ams.source.kernel.org ([2604:1380:4601:e00::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nyqzY-00BwQn-KE for linux-arm-kernel@lists.infradead.org; Wed, 08 Jun 2022 08:24:42 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id DDB31B82604 for ; Wed, 8 Jun 2022 08:24:36 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0BFB9C385A2 for ; Wed, 8 Jun 2022 08:24:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1654676675; bh=mb7wSkN8jvPB+WAq0VUpI6GigZN7Y0LbxGtiI8+txLQ=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=Xnsxzz+qUz80qbBBvqQ+QCiV4RqU8h3TGG4nVvp4LCbzKxe6zoYLmXJBLOUQOvnCz 9KpMrhHVNXZ3/88PXbYvKx+I2OTfOzbs69G5yzIbcwqk/29cYiJLU9yo4MpEYO5Y8P FQ+1PGPPyXdQ2OPfl55sH5M3Tcf5PN2+6yaPIhCac0sgFNwek11PaWmSnDBb0EFXlv x/fsIYUg8zWQiRqJifZzEPaE7VPeJglyVK7ujgl21SURCAIzNYY9wa3pnoE7YYKFGH C35i5Vv4fILkwPyEsKQA68VkM1Np7sxgowlLUrD8pcaCxZZxFaskJXTcAU8oCMXx2t LIUgmnipytxfg== Received: by mail-oi1-f174.google.com with SMTP id q184so10231976oia.1 for ; Wed, 08 Jun 2022 01:24:34 -0700 (PDT) X-Gm-Message-State: AOAM530Sil795nG6NuGSGRet1N6+hoc5ZGk1dpABrM5UixTH5bHIhkIW 0MloO3KAzARORO2SWimN6a/SJDGzt0qHuJlNxB8= X-Google-Smtp-Source: ABdhPJw03BDzzvLonfN/ypOZmks1XwcawN8XKZuO6awjwAHnNx3Lys+ui40b1XzgJzTd1I4qjM1PG7zKththQ/kYyQw= X-Received: by 2002:a05:6808:300e:b0:32c:425e:df34 with SMTP id ay14-20020a056808300e00b0032c425edf34mr1722849oib.126.1654676674178; Wed, 08 Jun 2022 01:24:34 -0700 (PDT) MIME-Version: 1.0 References: <20220607100210.683136-1-Jason@zx2c4.com> In-Reply-To: <20220607100210.683136-1-Jason@zx2c4.com> From: Ard Biesheuvel Date: Wed, 8 Jun 2022 10:24:23 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH] random: do not use jump labels before they are initialized To: "Jason A. Donenfeld" Cc: Linux Kernel Mailing List , Linux ARM , Stephen Boyd , Catalin Marinas , Russell King , Arnd Bergmann , Phil Elwell X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220608_012441_025066_628843C7 X-CRM114-Status: GOOD ( 34.13 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Tue, 7 Jun 2022 at 12:04, Jason A. Donenfeld wrote: > > [ I would like to pursue fixing this more directly first before actually > merging this, but I thought I'd send this to the list now anyway as a > the "backup" plan. If I can't figure out how to make headway on the > main plan in the next few days, it'll be easy to just do this. ] > > Stephen reported that a static key warning splat appears during early > boot on systems that credit randomness from device trees that contain an > "rng-seed" property, because because setup_machine_fdt() is called > before jump_label_init() during setup_arch(): > > static_key_enable_cpuslocked(): static key '0xffffffe51c6fcfc0' used before call to jump_label_init() > WARNING: CPU: 0 PID: 0 at kernel/jump_label.c:166 static_key_enable_cpuslocked+0xb0/0xb8 > Modules linked in: > CPU: 0 PID: 0 Comm: swapper Not tainted 5.18.0+ #224 44b43e377bfc84bc99bb5ab885ff694984ee09ff > pstate: 600001c9 (nZCv dAIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--) > pc : static_key_enable_cpuslocked+0xb0/0xb8 > lr : static_key_enable_cpuslocked+0xb0/0xb8 > sp : ffffffe51c393cf0 > x29: ffffffe51c393cf0 x28: 000000008185054c x27: 00000000f1042f10 > x26: 0000000000000000 x25: 00000000f10302b2 x24: 0000002513200000 > x23: 0000002513200000 x22: ffffffe51c1c9000 x21: fffffffdfdc00000 > x20: ffffffe51c2f0831 x19: ffffffe51c6fcfc0 x18: 00000000ffff1020 > x17: 00000000e1e2ac90 x16: 00000000000000e0 x15: ffffffe51b710708 > x14: 0000000000000066 x13: 0000000000000018 x12: 0000000000000000 > x11: 0000000000000000 x10: 00000000ffffffff x9 : 0000000000000000 > x8 : 0000000000000000 x7 : 61632065726f6665 x6 : 6220646573752027 > x5 : ffffffe51c641d25 x4 : ffffffe51c13142c x3 : ffff0a00ffffff05 > x2 : 40000000ffffe003 x1 : 00000000000001c0 x0 : 0000000000000065 > Call trace: > static_key_enable_cpuslocked+0xb0/0xb8 > static_key_enable+0x2c/0x40 > crng_set_ready+0x24/0x30 > execute_in_process_context+0x80/0x90 > _credit_init_bits+0x100/0x154 > add_bootloader_randomness+0x64/0x78 > early_init_dt_scan_chosen+0x140/0x184 > early_init_dt_scan_nodes+0x28/0x4c > early_init_dt_scan+0x40/0x44 > setup_machine_fdt+0x7c/0x120 > setup_arch+0x74/0x1d8 > start_kernel+0x84/0x44c > __primary_switched+0xc0/0xc8 > ---[ end trace 0000000000000000 ]--- > random: crng init done > Machine model: Google Lazor (rev1 - 2) with LTE > > A trivial fix went in to address this on arm64, 73e2d827a501 ("arm64: > Initialize jump labels before setup_machine_fdt()"). But it appears that > fixing it on other platforms might not be so trivial. Instead, defer the > setting of the static branch until later in the boot process. > > Fixes: f5bda35fba61 ("random: use static branch for crng_ready()") > Reported-by: Stephen Boyd > Cc: Ard Biesheuvel > Cc: Catalin Marinas > Cc: Russell King > Cc: Arnd Bergmann > Cc: Phil Elwell > Signed-off-by: Jason A. Donenfeld Reviewed-by: Ard Biesheuvel > --- > drivers/char/random.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/char/random.c b/drivers/char/random.c > index 4862d4d3ec49..f9a020ec08b9 100644 > --- a/drivers/char/random.c > +++ b/drivers/char/random.c > @@ -650,7 +650,8 @@ static void __cold _credit_init_bits(size_t bits) > > if (orig < POOL_READY_BITS && new >= POOL_READY_BITS) { > crng_reseed(); /* Sets crng_init to CRNG_READY under base_crng.lock. */ > - execute_in_process_context(crng_set_ready, &set_ready); > + if (static_key_initialized) > + execute_in_process_context(crng_set_ready, &set_ready); > wake_up_interruptible(&crng_init_wait); > kill_fasync(&fasync, SIGIO, POLL_IN); > pr_notice("crng init done\n"); > @@ -779,6 +780,14 @@ int __init random_init(const char *command_line) > unsigned int i, arch_bytes; > unsigned long entropy; > > + /* > + * If we were initialized by the bootloader before jump labels are > + * initialized, then we should enable the static branch here, where > + * it's guaranteed that jump labels have been initialized. > + */ > + if (!static_branch_likely(&crng_is_ready) && crng_init >= CRNG_READY) > + crng_set_ready(NULL); > + > #if defined(LATENT_ENTROPY_PLUGIN) > static const u8 compiletime_seed[BLAKE2S_BLOCK_SIZE] __initconst __latent_entropy; > _mix_pool_bytes(compiletime_seed, sizeof(compiletime_seed)); > -- > 2.35.1 > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel