From: Sean Christopherson <sean.j.christopherson@intel.com>
To: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Cc: Matthew Wilcox <willy@infradead.org>,
x86@kernel.org, linux-sgx@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-security-module@vger.kernel.org, linux-mm@kvack.org,
Andrew Morton <akpm@linux-foundation.org>,
Jethro Beekman <jethro@fortanix.com>,
Haitao Huang <haitao.huang@linux.intel.com>,
Chunyang Hui <sanqian.hcy@antfin.com>,
Jordan Hand <jorhand@linux.microsoft.com>,
Nathaniel McCallum <npmccallum@redhat.com>,
Seth Moore <sethmo@google.com>,
Suresh Siddha <suresh.b.siddha@intel.com>,
andriy.shevchenko@linux.intel.com, asapek@google.com,
bp@alien8.de, cedric.xing@intel.com, chenalexchen@google.com,
conradparker@google.com, cyhanish@google.com,
dave.hansen@intel.com, haitao.huang@intel.com,
josh@joshtriplett.org, kai.huang@intel.com, kai.svahn@intel.com,
kmoy@google.com, ludloff@google.com, luto@kernel.org,
nhorman@redhat.com, puiterwijk@redhat.com, rientjes@google.com,
tglx@linutronix.de, yaozhangx@google.com
Subject: Re: [PATCH v34 11/24] x86/sgx: Add SGX enclave driver
Date: Mon, 6 Jul 2020 21:29:04 -0700 [thread overview]
Message-ID: <20200707042904.GD5208@linux.intel.com> (raw)
In-Reply-To: <20200707041151.GE143804@linux.intel.com>
Man, I really need to type faster.
On Tue, Jul 07, 2020 at 07:11:51AM +0300, Jarkko Sakkinen wrote:
> On Tue, Jul 07, 2020 at 04:36:17AM +0100, Matthew Wilcox wrote:
> > What's a leaf function? Is it like a CPU instruction?
>
> Yeah, the opcode is ENCLS for ring-0 (enclave management and
> construction) and ENCLU for ring-3 (entrance to the enclave etc).
> The leaf function number goes to EAX.
To add to Jarkko's comments, for all intents and purposes they are individual
instructions, e.g. all of their own entries in the SDM, but are buried behind
a single opcode that switches on EAX, e.g. ECREATE is EAX=0, EADD is EAX=1,
EINIT is EAX=2. It's purely a way to save opcode space when the extra
overhead is a non-issue, e.g. SMX/TXT's GETSEC does the same shenanigans.
> > > + atomic_set(&encl->flags, 0);
> > > + kref_init(&encl->refcount);
> > > + INIT_RADIX_TREE(&encl->page_tree, GFP_KERNEL);
> >
> > Why are you using a radix tree instead of an xarray?
>
> Because xarray did not exist in 2017 and nobody has pointed out to use
> it. Now I know it exists (yet do not know what it is).
I've followed xarrays a little, but obviously not closely enough to
understand their advantages over radix trees. At a glance, range-based
iteration alone is probably justification enough to switch.
> > > +int sgx_encl_may_map(struct sgx_encl *encl, unsigned long start,
> > > + unsigned long end, unsigned long vm_prot_bits)
> > > +{
> > > + unsigned long idx, idx_start, idx_end;
> > > + struct sgx_encl_page *page;
> > > +
> > > + /*
> > > + * Disallow RIE tasks as their VMA permissions might conflict with the
> > > + * enclave page permissions.
> > > + */
> > > + if (!!(current->personality & READ_IMPLIES_EXEC))
> > > + return -EACCES;
> > > +
> > > + idx_start = PFN_DOWN(start);
> > > + idx_end = PFN_DOWN(end - 1);
> > > +
> > > + for (idx = idx_start; idx <= idx_end; ++idx) {
> > > + mutex_lock(&encl->lock);
> > > + page = radix_tree_lookup(&encl->page_tree, idx);
> > > + mutex_unlock(&encl->lock);
> > > +
> > > + if (!page || (~page->vm_max_prot_bits & vm_prot_bits))
> > > + return -EACCES;
> >
> > You should really use an iterator here instead of repeated lookups.
> > xas_for_each() will probably be what you want.
>
> Thank you for your remarks. I'll look into using xarray for this.
Question for Matthew:
To enforce the "page must be populated" rule, is there a clean way to retrieve
the index of the current entry? Our entries/pages don't have information
about their index. Or should we just count the number of entries and check
'em at the end? E.g.
xas_for_each(...) {
if (~page->vm_max_prot_bits & vm_prot_bits)
return -EACCES;
nr_entries++;
}
if (nr_entries != (end_index - start_index))
return -EACCES;
next prev parent reply other threads:[~2020-07-07 4:29 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20200707030204.126021-1-jarkko.sakkinen@linux.intel.com>
2020-07-07 3:01 ` [PATCH v34 10/24] mm: Add vm_ops->mprotect() Jarkko Sakkinen
2020-07-07 3:14 ` Matthew Wilcox
2020-07-07 3:22 ` Sean Christopherson
2020-07-07 3:24 ` Matthew Wilcox
2020-07-07 4:01 ` Jarkko Sakkinen
2020-07-07 4:10 ` Matthew Wilcox
2020-07-08 14:33 ` Jarkko Sakkinen
2020-07-08 14:37 ` Matthew Wilcox
2020-07-08 16:10 ` Jarkko Sakkinen
2020-07-08 22:56 ` Jarkko Sakkinen
2020-07-07 4:03 ` Jarkko Sakkinen
2020-07-07 3:01 ` [PATCH v34 11/24] x86/sgx: Add SGX enclave driver Jarkko Sakkinen
2020-07-07 3:36 ` Matthew Wilcox
2020-07-07 4:11 ` Jarkko Sakkinen
2020-07-07 4:29 ` Sean Christopherson [this message]
2020-07-07 4:39 ` Matthew Wilcox
2020-07-07 4:46 ` Sean Christopherson
2020-07-07 3:01 ` [PATCH v34 16/24] x86/sgx: Add a page reclaimer 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=20200707042904.GD5208@linux.intel.com \
--to=sean.j.christopherson@intel.com \
--cc=akpm@linux-foundation.org \
--cc=andriy.shevchenko@linux.intel.com \
--cc=asapek@google.com \
--cc=bp@alien8.de \
--cc=cedric.xing@intel.com \
--cc=chenalexchen@google.com \
--cc=conradparker@google.com \
--cc=cyhanish@google.com \
--cc=dave.hansen@intel.com \
--cc=haitao.huang@intel.com \
--cc=haitao.huang@linux.intel.com \
--cc=jarkko.sakkinen@linux.intel.com \
--cc=jethro@fortanix.com \
--cc=jorhand@linux.microsoft.com \
--cc=josh@joshtriplett.org \
--cc=kai.huang@intel.com \
--cc=kai.svahn@intel.com \
--cc=kmoy@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-security-module@vger.kernel.org \
--cc=linux-sgx@vger.kernel.org \
--cc=ludloff@google.com \
--cc=luto@kernel.org \
--cc=nhorman@redhat.com \
--cc=npmccallum@redhat.com \
--cc=puiterwijk@redhat.com \
--cc=rientjes@google.com \
--cc=sanqian.hcy@antfin.com \
--cc=sethmo@google.com \
--cc=suresh.b.siddha@intel.com \
--cc=tglx@linutronix.de \
--cc=willy@infradead.org \
--cc=x86@kernel.org \
--cc=yaozhangx@google.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).