From: Ingo Molnar <mingo@kernel.org>
To: Ard Biesheuvel <ardb@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>,
Ard Biesheuvel <ardb+git@google.com>,
linux-kernel@vger.kernel.org, linux-efi@vger.kernel.org,
x86@kernel.org, Dionna Amalie Glaze <dionnaglaze@google.com>,
Kevin Loughlin <kevinloughlin@google.com>,
Tom Lendacky <thomas.lendacky@amd.com>,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: Re: [RFT PATCH v3 00/21] x86: strict separation of startup code
Date: Wed, 14 May 2025 08:32:03 +0200 [thread overview]
Message-ID: <aCQ444zAwwkUwwm8@gmail.com> (raw)
In-Reply-To: <CAMj1kXEzKEuePEiHB+HxvfQbFz0sTiHdn4B++zVBJ2mhkPkQ4Q@mail.gmail.com>
* Ard Biesheuvel <ardb@kernel.org> wrote:
> On Tue, 13 May 2025 at 15:17, Borislav Petkov <bp@alien8.de> wrote:
> >
> > On Tue, May 13, 2025 at 01:22:16PM +0200, Ingo Molnar wrote:
> ...
> > > Note that two of those fixes were from Ard who is working on further
> > > robustifying the startup code - a much needed change.
> >
> > Really? Much needed huh?
> >
> > Please do explain why is it much needed?
> >
> > Because the reason Ard is doing it is a different one but maybe
> > I misunderstood him...
> >
>
> I will refrain from inserting myself into the intra-tip review and
> testing policy debate, but let me at least provide a quick recap of
> what I am doing here and why.
>
> Since commit
>
> c88d71508e36 x86/boot/64: Rewrite startup_64() in C
>
> dated Jun 6 2017, we have been using C code on the boot path in a way
> that is not supported by the toolchain, i.e., to execute non-PIC C
> code from a mapping of memory that is different from the one provided
> to the linker. It should have been obvious at the time that this was a
> bad idea, given the need to sprinkle fixup_pointer() calls left and
> right to manipulate global variables (including non-pointer variables)
> without crashing.
>
> This C startup code has been expanding, and in particular, the SEV-SNP
> startup code has been expanding over the past couple of years, and
> grown many of these warts, where the C code needs to use special
> annotations or helpers to access global objects.
>
> Google uses Clang internally, and as expected, it does not behave
> quite like GCC in this regard either. The result is that the SEV-SNP
> boot tended to break in cryptic ways with Clang built kernels, due to
> absolute references in the startup code that runs before those
> absolute references are mapped.
>
> I've done a preliminary pass upstream with RIP_REL_REF() and
> rip_rel_ptr() and the use of the .head.text section for startup code
> to ensure that we detect such issues at build time, and it has already
> resulted in a number of true positives where the code in question
> would have failed at boot time. At this point, I'm not aware of any
> issues caused by absolute references going undetected.
>
> However, Linus kindly indicated that the resulting diagnostics
> produced by the relocs tool do not meet his high standards, and so I
> proposed another approach, which I am implementing now (see cover
> letter for details). Note that this approach is also much more robust,
> as annotating things as __head by hand to get it emitted into the
> section to which the diagnostics are applied is obviously not
> foolproof.
Exactly.
> Fixing the existing 5-level paging and kernel mapping code was rather
> straight-forward. However, splitting up the SEV-SNP code has been
> rather challenging due to the way it was put together, i.e., as a
> single source file used everywhere, and to which additional
> functionality has been added piecemeal (i.e., the SVSM support).
Yeah.
> It is obvious that these changes should be tested before being merged,
> hence the RFT in the subject. And I have been struggling a bit to get
> access to usable hardware. (I do have access to internal development
> systems, but those do not fit the 'usable' description by any measure,
> given that I have to go through the cloud VM orchestration APIs to
> test boot a simple kernel image).
:-/ This is one of the reasons why bugs have such long latencies here.
For example it appears nobody has run kdump on SEV-SNP since last
August:
d2062cc1b1c3 x86/sev: Do not touch VMSA pages during SNP guest memory kdump
...
It then results in unrecoverable #NPF/RMP faults as the VMSA page is
marked busy/in-use when the vCPU is running and subsequently a causes
guest softlockup/hang.
...
1 file changed, 158 insertions(+), 86 deletions(-)
Yet lack of testability of your SEV-SNP series is still somehow
blocking ongoing development work.
> What Boris might allude to is the fact that some of these changes also
> form a prerequisite for being able to construct a generic EFI zboot
> image for x86, which is a long-term objective that I am working on in
> the background. But this is not the main reason.
>
> In any case, there is no urgency wrt these changes as far as I am
> concerned, and given that I already found an issue myself with v3,
> perhaps it is better if we disregard it for the time being, and we can
> come back to it for the next cycle. In the mean time, I can compare
> notes with Boris and Tom directly to ensure that this is in the right
> shape, and perhaps we could at least fix the pgtable_l5_enabled() mess
> as well (for which I sent out a RFC/v3 today).
You are being exceedingly generous here, but obviously boot code
changes need quite a bit of testing, and v6.17 (or later) is perfectly
fine too.
We could perhaps do the mechanical code movement to
arch/x86/boot/startup/ alone, without any of the followup functional
changes. This would reduce the cross section of the riskiest part of
your series substantially. If that sounds good to you, please send a
series for review.
Thanks,
Ingo
next prev parent reply other threads:[~2025-05-14 6:32 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-12 19:08 [RFT PATCH v3 00/21] x86: strict separation of startup code Ard Biesheuvel
2025-05-12 19:08 ` [RFT PATCH v3 01/21] x86/sev: Separate MSR and GHCB based snp_cpuid() via a callback Ard Biesheuvel
2025-05-15 7:22 ` Ingo Molnar
2025-05-15 10:24 ` Ard Biesheuvel
2025-05-15 15:18 ` Ingo Molnar
2025-05-15 11:10 ` Borislav Petkov
2025-05-15 14:22 ` Ard Biesheuvel
2025-05-12 19:08 ` [RFT PATCH v3 02/21] x86/sev: Use MSR protocol for remapping SVSM calling area Ard Biesheuvel
2025-05-15 16:43 ` Borislav Petkov
2025-05-12 19:08 ` [RFT PATCH v3 03/21] x86/sev: Use MSR protocol only for early SVSM PVALIDATE call Ard Biesheuvel
2025-05-12 19:08 ` [RFT PATCH v3 04/21] x86/sev: Run RMPADJUST on SVSM calling area page to test VMPL Ard Biesheuvel
2025-05-20 9:44 ` Borislav Petkov
2025-05-12 19:08 ` [RFT PATCH v3 05/21] x86/sev: Move GHCB page based HV communication out of startup code Ard Biesheuvel
2025-05-20 11:38 ` Borislav Petkov
2025-05-20 11:49 ` Ard Biesheuvel
2025-05-20 13:58 ` Borislav Petkov
2025-05-12 19:08 ` [RFT PATCH v3 06/21] x86/sev: Avoid global variable to store virtual address of SVSM area Ard Biesheuvel
2025-05-12 19:08 ` [RFT PATCH v3 07/21] x86/sev: Move MSR save/restore out of early page state change helper Ard Biesheuvel
2025-05-12 19:08 ` [RFT PATCH v3 08/21] x86/sev: Share implementation of MSR-based page state change Ard Biesheuvel
2025-05-12 19:08 ` [RFT PATCH v3 09/21] x86/sev: Pass SVSM calling area down to early page state change API Ard Biesheuvel
2025-05-13 13:55 ` Ard Biesheuvel
2025-05-13 13:58 ` Ard Biesheuvel
2025-05-12 19:08 ` [RFT PATCH v3 10/21] x86/sev: Use boot SVSM CA for all startup and init code Ard Biesheuvel
2025-05-12 19:08 ` [RFT PATCH v3 11/21] x86/boot: Drop redundant RMPADJUST in SEV SVSM presence check Ard Biesheuvel
2025-05-12 19:08 ` [RFT PATCH v3 12/21] x86/sev: Unify SEV-SNP hypervisor feature check Ard Biesheuvel
2025-05-30 11:16 ` Borislav Petkov
2025-05-30 14:28 ` Ard Biesheuvel
2025-05-30 16:08 ` Borislav Petkov
2025-05-30 16:12 ` Ard Biesheuvel
2025-05-30 16:55 ` Borislav Petkov
2025-05-12 19:08 ` [RFT PATCH v3 13/21] x86/sev: Provide PIC aliases for SEV related data objects Ard Biesheuvel
2025-05-12 19:08 ` [RFT PATCH v3 14/21] x86/boot: Provide PIC aliases for 5-level paging related constants Ard Biesheuvel
2025-05-12 19:08 ` [RFT PATCH v3 15/21] x86/sev: Move __sev_[get|put]_ghcb() into separate noinstr object Ard Biesheuvel
2025-05-12 19:08 ` [RFT PATCH v3 16/21] x86/sev: Export startup routines for later use Ard Biesheuvel
2025-05-12 19:08 ` [RFT PATCH v3 17/21] x86/boot: Create a confined code area for startup code Ard Biesheuvel
2025-05-12 19:08 ` [RFT PATCH v3 18/21] x86/boot: Move startup code out of __head section Ard Biesheuvel
2025-05-12 19:08 ` [RFT PATCH v3 19/21] x86/boot: Disallow absolute symbol references in startup code Ard Biesheuvel
2025-05-12 19:08 ` [RFT PATCH v3 20/21] x86/boot: Revert "Reject absolute references in .head.text" Ard Biesheuvel
2025-06-01 9:39 ` Borislav Petkov
2025-05-12 19:08 ` [RFT PATCH v3 21/21] x86/boot: Get rid of the .head.text section Ard Biesheuvel
2025-05-12 19:17 ` [RFT PATCH v3 00/21] x86: strict separation of startup code Borislav Petkov
2025-05-13 10:02 ` Ingo Molnar
2025-05-13 10:12 ` Borislav Petkov
2025-05-13 11:22 ` Ingo Molnar
2025-05-13 14:16 ` Borislav Petkov
2025-05-13 15:01 ` Ard Biesheuvel
2025-05-13 16:44 ` Borislav Petkov
2025-05-13 21:31 ` Ard Biesheuvel
2025-05-14 6:32 ` Ingo Molnar [this message]
2025-05-14 7:41 ` Ard Biesheuvel
2025-05-15 7:17 ` Ingo Molnar
2025-05-14 6:20 ` Ingo Molnar
2025-05-14 8:17 ` Borislav Petkov
2025-05-14 8:21 ` Borislav Petkov
2025-05-14 9:54 ` Thomas Gleixner
2025-05-14 17:21 ` Borislav Petkov
2025-05-14 17:37 ` Ard Biesheuvel
2025-05-14 18:53 ` Borislav Petkov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aCQ444zAwwkUwwm8@gmail.com \
--to=mingo@kernel.org \
--cc=ardb+git@google.com \
--cc=ardb@kernel.org \
--cc=bp@alien8.de \
--cc=dionnaglaze@google.com \
--cc=kevinloughlin@google.com \
--cc=linux-efi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=thomas.lendacky@amd.com \
--cc=torvalds@linux-foundation.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.