Re: [PATCH 1/2] x86/tdx: Extract GET_INFO call from get_cc_mask()

From: Kirill A. Shutemov
Date: Mon Oct 31 2022 - 15:19:33 EST


On Mon, Oct 31, 2022 at 09:42:15AM -0700, Dave Hansen wrote:
> On 10/30/22 21:12, Kirill A. Shutemov wrote:
> > On Sat, Oct 29, 2022 at 02:59:51AM +0300, Kirill A. Shutemov wrote:
> >>> Can you please take a look through this and make sure I didn't botch
> >>> anything:
> >>>
> >>>> https://git.kernel.org/pub/scm/linux/kernel/git/daveh/devel.git/log/?h=tdxbadve
> >>>
> >>> The end result is about 50 lines less than what was there before. Most
> >>> of it is comment removal but the code is simpler too.
> >>>
> >>> Acks and Tested-by's would be appreciated.
> >
> > One thing that I must bring up is that it seems that there's no way to get
> > the panic message to user. I tried to convinced myself that it is qemu
> > misconfiguration on my part or some race, but no: it is just too early for
> > earlyprintk.
> >
> > We only get earlyprintk working after parse_early_options() which happens
> > well after tdx_early_init().
> >
> > Moving panic() after earlyprintk working is not good idea as it exposes
> > kernel more: by the time we already have full #VE handler.
>
> How about we soften the panic() to a pr_err() if it's a debug guest?

The plan is to have pr_warn() + check in handle_mmio(), as I mentioned
before. But pr_err() also works.

> The first thing a user is going to do if they get an early boot failure
> is flip the debug switch and try it again. That gets us safe,
> well-defined behavior when we need security and also lets us figure out
> what went wrong.
>
> Also, did anyone ever actually implement that TDX earlyprintk simple
> console thing? A TDCALL up to the host with some characters in a
> register or two is as dirt simple of a console as you can get. It would
> be very easy to improve the user experience here if there were a:
>
> tdx_puts("uh oh");
>
> interface. It's a shame if it didn't get done by now. I asked for it
> years ago.

There's nothing like this, unfortunately.

There's ReportFatalError TDVMCALL that intended for the task, but it only
takes an error code as input which is useless here. Nobody will decode it.

> And, yeah, I know it wouldn't help us in this precise situation because
> earlyprintk doesn't work yet. But, it *would* be one of those really,
> really early bitbanging-style consoles that _could_ be in use very, very
> early if the printk() infrastructure could take advantage of it.
>
> > We can move it earlier into decompresser which has different earlyprintk
> > implementation. Not sure if it worth this. What do you think?
>
> There's the puts()/printf() gunk that's really early like in
> validate_cpu(). Is that what you were thinking of?

More like error() in arch/x86/boot/compressed/kaslr.c.

--
Kiryl Shutsemau / Kirill A. Shutemov