On Tue, Feb 07, 2023 at 08:41:16AM +0000, Dov Murik wrote: > Recent feature to supply RNG seed to the guest kernel modifies the > kernel command-line by adding extra data at its end; this breaks > measured boot with SEV and OVMF, and possibly signed boot. > > Specifically SEV doesn't miss this feature because it uses UEFI/OVMF > which has its own way of getting random seed (not to mention that > getting the random seed from the untrusted host breaks the confidential > computing trust model). > > Disable the RNG seed feature in SEV guests. > > Fixes: eac7a7791bb6 ("x86: don't let decompressed kernel image clobber > setup_data") > Reported-by: Tom Lendacky <thomas.lenda...@amd.com> > Signed-off-by: Dov Murik <dovmu...@linux.ibm.com> > > --- > > There might be a need for a wider change to the ways setup_data entries > are handled in x86_load_linux(); here I just try to restore the > situation for SEV guests prior to the addition of the SETUP_RNG_SEED > entry. > > Recent discussions on other (safer?) ways to pass this setup_data entry: > [1] > https://lore.kernel.org/qemu-devel/da39abab9785aea2a2e7652ed6403b6268aeb31f.ca...@linux.ibm.com/ > > Note that in qemu 7.2.0 this is broken as well -- there the > SETUP_RNG_SEED entry is appended to the Linux kernel data (and therefore > modifies and breaks the measurement of the kernel in SEV measured boot). > A similar fix will be needed there (but I fear this patch cannot be > applied as-is). > --- > hw/i386/x86.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/hw/i386/x86.c b/hw/i386/x86.c > index eaff4227bd..e65a83f8df 100644 > --- a/hw/i386/x86.c > +++ b/hw/i386/x86.c > @@ -1103,7 +1103,7 @@ void x86_load_linux(X86MachineState *x86ms, > load_image_size(dtb_filename, setup_data->data, dtb_size); > } > > - if (!legacy_no_rng_seed && protocol >= 0x209) { > + if (!legacy_no_rng_seed && protocol >= 0x209 && !sev_enabled()) { > setup_data_offset = cmdline_size; > cmdline_size += sizeof(SetupData) + RNG_SEED_LENGTH; > kernel_cmdline = g_realloc(kernel_cmdline, cmdline_size); > > base-commit: 6661b8c7fe3f8b5687d2d90f7b4f3f23d70e3e8b > -- > 2.25.1 >
Thanks for catching this. The same thing should also probably be set on the dtb handling, and the commit message updated to reflect that this is setup_data-specific, not just for the rng seed. I'm concurrently working on a related bug fix in this same code. If you want, I can roll a v2 of your patch (retaining your authorship) and submit that together, if you want. Jason