[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200923144707.GF5160@linux.intel.com>
Date: Wed, 23 Sep 2020 17:47:07 +0300
From: Jarkko Sakkinen <jarkko.sakkinen@...ux.intel.com>
To: Borislav Petkov <bp@...en8.de>
Cc: Jethro Beekman <jethro@...tanix.com>,
Sean Christopherson <sean.j.christopherson@...el.com>,
x86@...nel.org, linux-sgx@...r.kernel.org,
linux-kernel@...r.kernel.org,
Haitao Huang <haitao.huang@...ux.intel.com>,
Chunyang Hui <sanqian.hcy@...fin.com>,
Jordan Hand <jorhand@...ux.microsoft.com>,
Nathaniel McCallum <npmccallum@...hat.com>,
Seth Moore <sethmo@...gle.com>,
Darren Kenny <darren.kenny@...cle.com>,
Suresh Siddha <suresh.b.siddha@...el.com>,
akpm@...ux-foundation.org, andriy.shevchenko@...ux.intel.com,
asapek@...gle.com, cedric.xing@...el.com, chenalexchen@...gle.com,
conradparker@...gle.com, cyhanish@...gle.com,
dave.hansen@...el.com, haitao.huang@...el.com,
josh@...htriplett.org, kai.huang@...el.com, kai.svahn@...el.com,
kmoy@...gle.com, ludloff@...gle.com, luto@...nel.org,
nhorman@...hat.com, puiterwijk@...hat.com, rientjes@...gle.com,
tglx@...utronix.de, yaozhangx@...gle.com
Subject: Re: [PATCH v38 14/24] x86/sgx: Add SGX_IOC_ENCLAVE_INIT
On Tue, Sep 22, 2020 at 04:29:09PM +0200, Borislav Petkov wrote:
> On Tue, Sep 22, 2020 at 02:56:19PM +0200, Jethro Beekman wrote:
> > I don't see why you'd need to retry indefinitely. Yes the MSRs may not
> > match the cached value for “reasons”, but if after you've written
> > them once it still doesn't work, clearly either 1) an “unhelpful”
> > VMM is actively messing with the MSRs which I'd say is at best a VMM
> > bug or 2) there was an EPC reset and your enclave is now invalid
> > anyway, so no need to EINIT.
>
> /me likes that even more.
OK, so I did not follow this particular discussion in high detail, so
as a sanity check I'll preview my changes.
I'd refine sgx_update_lepubkeyhash_msrs() to:
static void sgx_update_lepubkeyhash_msrs(u64 *lepubkeyhash)
{
u64 *cache;
int i;
preempt_disable();
cache = per_cpu(sgx_lepubkeyhash_cache, smp_processor_id());
for (i = 0; i < 4; i++) {
if (lepubkeyhash[i] != cache[i]) {
wrmsrl(MSR_IA32_SGXLEPUBKEYHASH0 + i, lepubkeyhash[i]);
cache[i] = lepubkeyhash[i];
}
}
preempt_enable();
}
I'd drop sgx_einit() completely.
Finally, in sgx_encl_init() I would call sgx_update_lepubkeyhash_msrs()
directly:
/* ... */
sgx_update_lepubkeyhash_msrs(mrsigner);
ret = __einit(sigstruct, token, sgx_get_epc_addr(secs));
/* ... */
These staments would replace the call to sgx_einit().
Do I have the correct understanding?
/Jarkko
Powered by blists - more mailing lists