Re: [RFC PATCH 3/9] x86/sgx: Allow userspace to add multiple pages in single ioctl()

From: Sean Christopherson
Date: Mon Jun 03 2019 - 18:03:31 EST


On Mon, Jun 03, 2019 at 01:14:45PM -0700, Dave Hansen wrote:
> On 5/31/19 4:31 PM, Sean Christopherson wrote:
> > -struct sgx_enclave_add_page {
> > +struct sgx_enclave_add_pages {
> > __u64 addr;
> > __u64 src;
> > __u64 secinfo;
> > + __u32 nr_pages;
> > __u16 mrmask;
> > } __attribute__((__packed__));
>
> IMNHO this follows a user interface anti-pattern: exposing page sizes
> where not strictly required.
>
> Think of how this would look to an application if page size was
> variable. With this interface, they always need to scale their
> operations by page size instead of just aligning it.

I briefly considered taking size in bytes, but I took a shortcut because
EPC pages are architecturally defined to be 4k sized and aligned. That
being said, I don't necessarily disagree, especially if nr_pages isn't
squeezed into a u32.

> BTW, why is nr_pages a u32? Do we never envision a case where you can
> add more than 4TB of memory to an enclave? ;)

Heh, fair enough. IIRC, a while back someone posted about having problems
building a 512gb enclave in a 92mb EPC...

How about this for the intermediate patch:

struct sgx_enclave_add_region {
__u64 addr;
__u64 src;
__u64 size;
__u64 secinfo;
__u16 mrmask;
__u16 reserved16;
__u32 reserved;
}

and with the flags field:

struct sgx_enclave_add_region {
__u64 addr;
__u64 src;
__u64 size;
__u64 secinfo;
__u16 mrmask;
__u16 flags;
__u32 reserved;
}