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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 15A5EC64ED6 for ; Wed, 1 Mar 2023 16:30:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229910AbjCAQa2 (ORCPT ); Wed, 1 Mar 2023 11:30:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50554 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229876AbjCAQaD (ORCPT ); Wed, 1 Mar 2023 11:30:03 -0500 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6D0EF4393C; Wed, 1 Mar 2023 08:29:53 -0800 (PST) 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 dfw.source.kernel.org (Postfix) with ESMTPS id E61CA61411; Wed, 1 Mar 2023 16:29:52 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id BF484C433A1; Wed, 1 Mar 2023 16:29:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1677688192; bh=G3JfbTsNi23rXEdWg0lTtz3JCcDgM3Hn0d9MSJ5QCvU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Y6qYElz35fRFGGg3DJaBB99+XI7DtyrFmLlNFDSHTWmTmCX7V4F6k5c5FwTRNDCGc pLd+ePE5sQCX611v+St1MArhtMbV5ybm5c484nbS311TKRESf7Np7q01fyrNfTLbTW cCZilod3pkCnfKn4Jcv4tKK+HFsTbDRaLnxpjqKKp5Pvl/6n+LPK0w7RmNPUaA3ZNv FOi/nQByz9EKGGCUuQOBlccImU7FDkdfreoV66T/l0nGE6A1ww1zBFtwjAemDC07v3 442ysDSrqxGNtAgq3lVLbQy5yas3jeK5kub48lSSWyKiv0CAivLROEWuKa4CT5rAN6 Re9GN/Yubzs2A== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Johan Hovold , Ard Biesheuvel , Sasha Levin , linux-efi@vger.kernel.org Subject: [PATCH AUTOSEL 5.15 2/6] efi: efivars: prevent double registration Date: Wed, 1 Mar 2023 11:29:44 -0500 Message-Id: <20230301162948.1302994-2-sashal@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230301162948.1302994-1-sashal@kernel.org> References: <20230301162948.1302994-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Johan Hovold [ Upstream commit 0217a40d7ba6e71d7f3422fbe89b436e8ee7ece7 ] Add the missing sanity check to efivars_register() so that it is no longer possible to override an already registered set of efivar ops (without first deregistering them). This can help debug initialisation ordering issues where drivers have so far unknowingly been relying on overriding the generic ops. Signed-off-by: Johan Hovold Signed-off-by: Ard Biesheuvel Signed-off-by: Sasha Levin --- drivers/firmware/efi/vars.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/firmware/efi/vars.c b/drivers/firmware/efi/vars.c index cae590bd08f27..871dee9343bfb 100644 --- a/drivers/firmware/efi/vars.c +++ b/drivers/firmware/efi/vars.c @@ -1164,19 +1164,28 @@ int efivars_register(struct efivars *efivars, const struct efivar_operations *ops, struct kobject *kobject) { + int rv; + if (down_interruptible(&efivars_lock)) return -EINTR; + if (__efivars) { + pr_warn("efivars already registered\n"); + rv = -EBUSY; + goto out; + } + efivars->ops = ops; efivars->kobject = kobject; __efivars = efivars; pr_info("Registered efivars operations\n"); - + rv = 0; +out: up(&efivars_lock); - return 0; + return rv; } EXPORT_SYMBOL_GPL(efivars_register); -- 2.39.2