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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3223AC7EE33 for ; Wed, 1 Mar 2023 16:36:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230239AbjCAQgh (ORCPT ); Wed, 1 Mar 2023 11:36:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60976 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230236AbjCAQgT (ORCPT ); Wed, 1 Mar 2023 11:36:19 -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 C3A6548E25; Wed, 1 Mar 2023 08:35:33 -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 56D376124D; Wed, 1 Mar 2023 16:30:30 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 25DF3C433D2; Wed, 1 Mar 2023 16:30:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1677688229; bh=mhLoWBLCvC+6LNIoKMHohw8KgtDwYWjT5FF61v3uLcc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=L+Atv3FyOsN45aXEvfqqePKl4RBjz0vPMXIsiHC9t1XMJ+Fi/1fpApLPJ5VchWut6 dBGLL0jOHkeSBEuOwlywH5jy5DDumqtY/n3fGxXGOHNZkVHBJj/Oo7LG94Jttm4jv5 utaYXYL39uiwx83PmedKGVmQiHSCE8mz9VfkQA4DguA9JZfjVxU6MvFx4NR9CQiD4N Wsl0ilLHSPrcmskCg18xk908hg1E+ww1KHuDcizdDVC9zKJ47c4cdaOrAaDjC2qD+9 T+a4XJfpyiJ7wZnPsAVETmtdumo+/c7NjG3lnpIR94LJ8b4WrsZDAGPtqOBogI20j4 mB4KitAIUxatQ== 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 4.14 2/3] efi: efivars: prevent double registration Date: Wed, 1 Mar 2023 11:30:24 -0500 Message-Id: <20230301163026.1303278-2-sashal@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230301163026.1303278-1-sashal@kernel.org> References: <20230301163026.1303278-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 e619ced030d52..462e88b9d2ba4 100644 --- a/drivers/firmware/efi/vars.c +++ b/drivers/firmware/efi/vars.c @@ -1195,19 +1195,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