Received: by 2002:a05:7412:2a91:b0:fc:a2b0:25d7 with SMTP id u17csp400496rdh; Tue, 13 Feb 2024 23:29:16 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCVhFHSteyUEDU5nbusjmytXPesCqG6/7Ne6kV11OsPJnBkyyoDMbVWnyhu8MoUn8malWFLSGs3JCH0cg+XEur3luAiVGj1r3XDLppnklQ== X-Google-Smtp-Source: AGHT+IHu+8isJlIkXJaNUrsd43f+4vWMndTBWFp0xke6E1zywz8ifTapL8VcHTSDS7NlW543DwRU X-Received: by 2002:a17:906:b18:b0:a38:833b:c8ad with SMTP id u24-20020a1709060b1800b00a38833bc8admr967802ejg.16.1707895756118; Tue, 13 Feb 2024 23:29:16 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707895756; cv=pass; d=google.com; s=arc-20160816; b=tSrHWXTJGB5A120EyF3IaHSY0HfjixMvQU0HNfDzhkHlEa14aojHbZBEwkXxRCYOTt mAPZRfJHO+Gezht16GIRaGGpiLFUFUCGj/FySJ8OzPfJLLUL0Li3woDn9MpqMOMOXcgV 458MnzjpSpTlEUdcSMJT3GFaLZUX4hmPakZlVFYoWtMbymOdkb7j3IXsfoVdk0fQxL+V iLn4rovwizCSJ5tRbU0mhCYfs7/3IXOgrt8eZpsiZ9Y/XjHNInO1O8xxUlsTz4eoVAEb LSoo9Ji5MEfirhWLSIQUzFtY7XR9nmGSgOccOdVrOUBG/cOVIf2Uoyjvh30ZgbJHsiys WHPg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :dkim-signature; bh=aEEo3ROU2mECN43NlxNHejs8zEP5mfAvXCNI/jj7aP8=; fh=oq5I9ygh+jdaopTupqE9+0Y/1lozfnojA0AOyIpm1/Y=; b=cIAxRiTyEs3pXIccnKcKTKiVqZiXs72RjR8FY+827NdurhbQCLcFyh7JF1Z9pXv8Sb 2WxXZJB7ro8om0fl7XDGBUnWdN3BJgT1ceuBx93tDYx6qJUIDSjCvd+rLI/tAK4yaA5y JHOJUDpUhnnifwMaLS1mzIJ+uJrMMvvnVVTMgaUWpce1f8jN7z+FRuU+UYJLa0Xyq+bI AKlrTolMH+9duo5oZ9souZI/DytM6tWfqCsEqqwVz938S7LnCr0owksx5nUNXf7eNZA7 ZEthzaS8tBkGSsUkxZQ4sXur/mCTgKcM4xselzo54btTo4YtqnEyqqW4B6KA/2mMRj1+ ukLg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=uYP0N+9w; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-64835-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-64835-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org X-Forwarded-Encrypted: i=2; AJvYcCWL50a04TyhpkycQCedvPUdCPTW/VTXVGnhWVK6BkmJ7r0EvQ1XYa3BgO9kpxPmx5zC451pjgXjgPmP59UtS4IskhS2adwP5zDBBivp3A== Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id s10-20020a056402520a00b005619eeaf02fsi3555338edd.1.2024.02.13.23.29.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 13 Feb 2024 23:29:16 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-64835-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=uYP0N+9w; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-64835-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-64835-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id AE7241F22857 for ; Wed, 14 Feb 2024 07:29:15 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 0F7C1125A7; Wed, 14 Feb 2024 07:28:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="uYP0N+9w" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 294E311731; Wed, 14 Feb 2024 07:28:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707895735; cv=none; b=iirkwHxLWzNIMICHrlIu60Z7sriL4KYhaepY285aabKAE/x9mHQ7dyhCupiatqk7g90GeloQR8T3Uio05F8XT7ruDKfGYnmRnfIoXul8oXoO19bv2WpzM5dTvFSZgw/L7/vYRSMQpz65wUKDrJGXqYCX5PcWmQzH9PNOO+VgFTw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707895735; c=relaxed/simple; bh=193v/W9i2ERfHNUMgfSABTMbWEw8kJdYQvvqGCxRdl0=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=VU5z7pTNuOVqm+cRwZT6IB7dDqSYgg6ye2hXTsBDK8/C9y1F8TRhSfbyaHllgbYpqaWLZzH1dX6iEjuZQbPNYZ4N7aBduylQD91eH97LPE+CBF4AMqc8BzWG6p3sTaFhKV+l2u0l/U69WxMgyYkAE0SZMJOBJ2WVtKP0zA3mVPo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=uYP0N+9w; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9C8CBC43601; Wed, 14 Feb 2024 07:28:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1707895734; bh=193v/W9i2ERfHNUMgfSABTMbWEw8kJdYQvvqGCxRdl0=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=uYP0N+9wBwi/1g/8CtcqR4KmpTKXE7wAa+NSqQoOiXCZ4T2v/xCqqT+BK3SaQC3pX VpyR898Vg3HqW7VzkohGBgCi7O/IkL0OaNHr2DZFXrsU0j/Q5V0WKTU6wuVsGuGAkN ON5dzOd5STH1PkweByWFMGTnu28Yjn+shjv1f9+z6yDalZpE0fvX1MSm9AJTPZM7ta u0HdyZzZE+boIF5AwcJ9WjKBH8yexnmoQc2hSxEMSpCLNoN4tI6XVjYwbKl514rlZz MEtSAZXvuA2KIijq64oGhmzy1g6Z75dFTGK4qAeKWvzBPR7AphdXRITvAlvRfcWmFd 3qikjoF2JQV0g== Received: by mail-lj1-f173.google.com with SMTP id 38308e7fff4ca-2d0cd9871b3so3956941fa.1; Tue, 13 Feb 2024 23:28:54 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCXppXOyhZstcJceFofxLRWnW2QIqHNMjarjVEwjs+FqbCgUldm8Y7tA5TXw3wOtHyyFjRc/ojO/0aOGriDpIuWs7+gQnNmdEgHjvbUzEYUkOGqO+0AAA7CKd8KwXZGHWsB7V7POTjZUgA== X-Gm-Message-State: AOJu0YzBFXkTbvjtlYU+RTR7BWaiuX4iXFTSJfkqsrsvVYvf8vXugqwa hZqKBGlB9sFcZvgCrUrnfO4x1y4MxJdaWakAJRpzZAztGxuqupmIzypgDRCdPbTLNG8XHmkt044 aQe2VbPkplgAzGeu+NPU8WUz8p0I= X-Received: by 2002:a19:655e:0:b0:511:9f53:3974 with SMTP id c30-20020a19655e000000b005119f533974mr373057lfj.2.1707895732786; Tue, 13 Feb 2024 23:28:52 -0800 (PST) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20240213124143.1484862-13-ardb+git@google.com> <20240213124143.1484862-14-ardb+git@google.com> <20240213200553.GYZcvLoYUNJOPGxoid@fat_crate.local> In-Reply-To: From: Ard Biesheuvel Date: Wed, 14 Feb 2024 08:28:41 +0100 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v4 01/11] x86/startup_64: Simplify global variable accesses in GDT/IDT programming To: Borislav Petkov Cc: Ard Biesheuvel , linux-kernel@vger.kernel.org, Kevin Loughlin , Tom Lendacky , Dionna Glaze , Thomas Gleixner , Ingo Molnar , Dave Hansen , Andy Lutomirski , Arnd Bergmann , Nathan Chancellor , Nick Desaulniers , Justin Stitt , Kees Cook , Brian Gerst , linux-arch@vger.kernel.org, llvm@lists.linux.dev Content-Type: text/plain; charset="UTF-8" On Tue, 13 Feb 2024 at 22:53, Ard Biesheuvel wrote: > > On Tue, 13 Feb 2024 at 21:06, Borislav Petkov wrote: > > > > On Tue, Feb 13, 2024 at 01:41:45PM +0100, Ard Biesheuvel wrote: > > > @@ -632,5 +616,5 @@ void __head startup_64_setup_env(unsigned long physbase) > > > "movl %%eax, %%ss\n" > > > "movl %%eax, %%es\n" : : "a"(__KERNEL_DS) : "memory"); > > > > > > - startup_64_load_idt(physbase); > > > + startup_64_load_idt(&RIP_REL_REF(vc_no_ghcb)); > > > > It took me a while to figure out that even if we pass in one of the two > > GHCB handler pointers, we only set it if CONFIG_AMD_MEM_ENCRYPT. > > > > I think this ontop of yours is a bit more readable as it makes it > > perfectly clear *when* the pointer is valid. > > > > Looks fine to me. > > > Yeah, if handler is set, we set it for the X86_TRAP_VC vector > > unconditionally but that can be changed later, if really needed. > > > > We might call the parameter 'vc_handler' to make this clearer. Actually, we can merge set_bringup_idt_handler() into its caller as well: diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c index aee99cfda4eb..804ba9a2214f 100644 --- a/arch/x86/kernel/head64.c +++ b/arch/x86/kernel/head64.c @@ -501,30 +501,22 @@ void __init __noreturn x86_64_start_reservations(char *real_mode_data) */ static gate_desc bringup_idt_table[NUM_EXCEPTION_VECTORS] __page_aligned_data; -static void __head set_bringup_idt_handler(gate_desc *idt, int n, void *handler) -{ -#ifdef CONFIG_AMD_MEM_ENCRYPT - struct idt_data data; - gate_desc desc; - - init_idt_data(&data, n, handler); - idt_init_desc(&desc, &data); - native_write_idt_entry(idt, n, &desc); -#endif -} - /* This may run while still in the direct mapping */ -static void __head startup_64_load_idt(void *handler) +static void __head startup_64_load_idt(void *vc_handler) { struct desc_ptr desc = { .address = (unsigned long)&RIP_REL_REF(bringup_idt_table), .size = sizeof(bringup_idt_table) - 1, }; - gate_desc *idt = (gate_desc *)desc.address; + struct idt_data data; + gate_desc idt_desc; - if (IS_ENABLED(CONFIG_AMD_MEM_ENCRYPT)) - /* VMM Communication Exception */ - set_bringup_idt_handler(idt, X86_TRAP_VC, handler); + if (vc_handler) { + init_idt_data(&data, X86_TRAP_VC, vc_handler); + idt_init_desc(&idt_desc, &data); + native_write_idt_entry((gate_desc *)desc.address, + X86_TRAP_VC, &idt_desc); + } native_load_idt(&desc); } (^^^ plus your changes boot tested on SEV-SNP)