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 09230C64ED6 for ; Wed, 1 Mar 2023 16:31:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230085AbjCAQb3 (ORCPT ); Wed, 1 Mar 2023 11:31:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49352 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230042AbjCAQbC (ORCPT ); Wed, 1 Mar 2023 11:31:02 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 40C453D937; Wed, 1 Mar 2023 08:30:17 -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 ams.source.kernel.org (Postfix) with ESMTPS id DFFFBB810C6; Wed, 1 Mar 2023 16:30:12 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0E913C4339B; Wed, 1 Mar 2023 16:30:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1677688211; bh=PbX0TD55RaWx1VxzE69P+xN6qSCRAAeP4gLI8IwMBqg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UNmenXaswXuqTpYIszo7zaaIQdbtj93Fm8L/hAVFPxpmBxY0g8eE8F64fiSSonZ/N FR//ebkuA8Lv+1Cz8GSaWM3KnSnjdBvcuXnYtGByQ+0Qj1QnQuKvwzZPI79JMAjyqd AYyJAe8oiCreQMJBP19Zi6OhybPp+vF5ujSStvildHTjz3rciK06LFsJMWDNwdo0Ol 2ezIdcdEqj71wYDg3IPNduPFTSwoS+YFD25I8WIOL+i1xJ1D4mMuXK1bVNp90Nr2Wg TGqxhtjqODfzNcQ83bcm1RPhoI7gxz23rO0huQkPMiwvsHoUGm/jZbuedHR3kBqwF/ AJPX0FT61O8YA== 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.4 2/4] efi: efivars: prevent double registration Date: Wed, 1 Mar 2023 11:30:05 -0500 Message-Id: <20230301163007.1303162-2-sashal@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230301163007.1303162-1-sashal@kernel.org> References: <20230301163007.1303162-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 a32d15b2928f7..87cbcbea40e90 100644 --- a/drivers/firmware/efi/vars.c +++ b/drivers/firmware/efi/vars.c @@ -1182,19 +1182,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