All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jarkko Sakkinen <jarkko@kernel.org>
To: Du Cheng <ducheng2@gmail.com>
Cc: Sean Christopherson <seanjc@google.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	x86@kernel.org, Dave Hansen <dave.hansen@linux.intel.com>,
	"H. Peter Anvin" <hpa@zytor.com>,
	linux-sgx@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] x86/sgx: Suppress WARN on inability to sanitize EPC if ksgxd is stopped
Date: Wed, 23 Jun 2021 16:32:19 +0300	[thread overview]
Message-ID: <20210623133219.v6c62zwtj5qowib3@kernel.org> (raw)
In-Reply-To: <YMmUHRGwXSIYJTDf@nuc>

On Wed, Jun 16, 2021 at 02:03:09PM +0800, Du Cheng wrote:
> Le Tue, Jun 15, 2021 at 05:44:58PM -0700, Sean Christopherson a écrit :
> > Don't WARN on having unsanitized EPC pages if ksgxd is stopped early,
> > e.g. if sgx_init() realizes there will be no downstream consumers of EPC.
> > If ksgxd is stopped early, EPC pages may be left on the dirty list, but
> > that's ok because ksgxd is only stopped if SGX initialization failed or
> > if the kernel is going down.  In either case, the EPC won't be used.
> > 
> > This bug was exposed by the addition of KVM support, but has existed and
> > was hittable since the original sanitization code was added.  Prior to
> > adding KVM support, if Launch Control was not fully enabled, e.g. when
> > running on older hardware, sgx_init() bailed immediately before spawning
> > ksgxd because X86_FEATURE_SGX was cleared if X86_FEATURE_SGX_LC was
> > unsupported.
> > 
> > With KVM support, sgx_drv_init() handles the X86_FEATURE_SGX_LC check
> > manually, so now there's any easy-to-hit case where sgx_init() will spawn
> > ksgxd and _then_ fail to initialize, which results in sgx_init() stopping
> > ksgxd before it finishes sanitizing the EPC.
> > 
> > Prior to KVM support, the bug was much harder to hit because it basically
> > required char device registration to fail.
> > 
> > Reported-by: Du Cheng <ducheng2@gmail.com>
> > Fixes: e7e0545299d8 ("x86/sgx: Initialize metadata for Enclave Page Cache (EPC) sections")
> > Signed-off-by: Sean Christopherson <seanjc@google.com>
> > ---
> > 
> > Lightly tested due to lack of hardware.  I hacked the flow to verify that
> > stopping early will leave work pending, and that rechecking should_stop()
> > suppress the resulting WARN.
> > 
> >  arch/x86/kernel/cpu/sgx/main.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/arch/x86/kernel/cpu/sgx/main.c b/arch/x86/kernel/cpu/sgx/main.c
> > index ad904747419e..fbad2b9625a5 100644
> > --- a/arch/x86/kernel/cpu/sgx/main.c
> > +++ b/arch/x86/kernel/cpu/sgx/main.c
> > @@ -425,7 +425,7 @@ static int ksgxd(void *p)
> >  	__sgx_sanitize_pages(&sgx_dirty_page_list);
> >  
> >  	/* sanity check: */
> > -	WARN_ON(!list_empty(&sgx_dirty_page_list));
> > +	WARN_ON(!list_empty(&sgx_dirty_page_list) && !kthread_should_stop());
> >  
> >  	while (!kthread_should_stop()) {
> >  		if (try_to_freeze())
> > -- 
> > 2.32.0.272.g935e593368-goog
> > 
> 
> I applied this patch on 5.13-rc6, and it no longer causes to trigger WARN_ON()
> on my NUC:
> 
> ```
> 
> [    0.669411] PCI-DMA: Using software bounce buffering for IO (SWIOTLB)
> [    0.669412] software IO TLB: mapped [mem 0x0000000017cb9000-0x000000001bcb9000] (64MB)
> [    0.672788] platform rtc_cmos: registered platform RTC device (no PNP device found)
> [    0.672805] sgx: EPC section 0x30200000-0x35f7ffff
> [    0.674239] Initialise system trusted keyrings
> [    0.674254] Key type blacklist registered
> 
> ```
> 
> Regards,
> Du Cheng

Can you thus give a tested-by for this?

/Jarkko

  reply	other threads:[~2021-06-23 13:32 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-16  0:44 [PATCH] x86/sgx: Suppress WARN on inability to sanitize EPC if ksgxd is stopped Sean Christopherson
2021-06-16  6:03 ` Du Cheng
2021-06-23 13:32   ` Jarkko Sakkinen [this message]
2021-06-25  0:47     ` Du Cheng
2021-06-17 16:45 ` Borislav Petkov
2021-06-18 15:41   ` Dave Hansen
2021-06-23 13:31 ` Jarkko Sakkinen

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=20210623133219.v6c62zwtj5qowib3@kernel.org \
    --to=jarkko@kernel.org \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=ducheng2@gmail.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sgx@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=seanjc@google.com \
    --cc=tglx@linutronix.de \
    --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.