lkml.org 
[lkml]   [2018]   [Dec]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: x86/sgx: uapi change proposal
    > On Dec 21, 2018, at 11:24 AM, Sean Christopherson <sean.j.christopherson@intel.com> wrote:
    >
    > On Fri, Dec 21, 2018 at 09:12:46AM -0800, Andy Lutomirski wrote:
    >>> On Dec 21, 2018, at 9:28 AM, Sean Christopherson <sean.j.christopherson@intel.com> wrote:
    >>>
    >>> On Wed, Dec 19, 2018 at 06:58:48PM -0800, Andy Lutomirski wrote:
    >>>>> On Dec 19, 2018, at 6:45 AM, Sean Christopherson <sean.j.christopherson@intel.com> wrote:
    >>>>>
    >>>>>>> On Wed, Dec 19, 2018 at 09:36:16AM +0000, Jethro Beekman wrote:
    >>>>>
    >>>>> I agree with Jethro, passing the enclave_fd as a param is obnoxious.
    >>>>> And it means the user needs to open /dev/sgx to do anything with an
    >>>>> enclave fd, e.g. the enclave fd might be passed to a builder thread,
    >>>>> it shouldn't also need the device fd.
    >>>>>
    >>>>> E.g.:
    >>>>>
    >>>>> sgx_fd = open("/dev/sgx", O_RDWR);
    >>>>> BUG_ON(sgx_fd < 0);
    >>>>>
    >>>>> enclave_fd = ioctl(sgx_fd, SGX_ENCLAVE_CREATE, &ecreate);
    >>>>> BUG_ON(enclave_fd < 0);
    >>>>>
    >>>>> ret = ioctl(enclave_fd, SGX_ENCLAVE_ADD_PAGE, &eadd);
    >>>>> BUG_ON(ret);
    >>>>>
    >>>>> ...
    >>>>>
    >>>>> ret = ioctl(enclave_fd, SGX_ENCLAVE_INIT, &einit);
    >>>>> BUG_ON(ret);
    >>>>>
    >>>>> ...
    >>>>>
    >>>>> close(enclave_fd);
    >>>>> close(sgx_fd);
    >>>>>
    >>>>>
    >>>>> Take a look at virt/kvm/kvm_main.c to see how KVM manages anon inodes
    >>>>> and ioctls for VMs and vCPUs.
    >>>>
    >>>> Can one of you explain why SGX_ENCLAVE_CREATE is better than just
    >>>> opening a new instance of /dev/sgx for each encalve?
    >>>
    >>> Directly associating /dev/sgx with an enclave means /dev/sgx can't be
    >>> used to provide ioctl()'s for other SGX-related needs, e.g. to mmap()
    >>> raw EPC and expose it a VM. Proposed layout in the link below. I'll
    >>> also respond to Jarkko's question about exposing EPC through /dev/sgx
    >>> instead of having KVM allocate it on behalf of the VM.
    >>
    >> Hmm. I guess this makes some sense. My instinct would be to do it a
    >> little differently and have:
    >>
    >> /dev/sgx/enclave: Each instance is an enclave.
    >>
    >> /dev/sgx/epc: Used to get raw EPC for KVM. Might have different
    >> permissions, perhaps 0660 and group kvm.
    >>
    >> /dev/sgx/something_else: For when SGX v3 adds something else :)
    >
    > Mmmm, I like this approach a lot. It would allow userspace to easily
    > manage permissions for each "feature", e.g. give all users access to
    > /dev/sgx/epc but restrict /dev/sgx/enclave.
    >
    > And we could add e.g. /dev/sgx/admin if we wanted to exposed ioctls()
    > that apply to all aspects of SGX.
    >
    > Do you know if /dev/sgx/epc could be dynamically created, e.g. by
    > KVM when the kvm_intel module is loaded?

    Presumably sgx would create a bus and enumerate the devices as needed.
    Or I suppose these things could be platform or system devices. I’m not
    really a device model expert, and the one time I tried to implement a
    character device, I got so disgusted that I wrote a whole library for
    it. It’s still in limbo somewhere.


    > That would seal the deal for
    > me as it'd keep open the option of having KVM handle oversubscription
    > of guest EPC while exposing EPC through /dev/sgx instead of /dev/kvm.

    \
     
     \ /
      Last update: 2018-12-23 21:43    [W:2.089 / U:2.244 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site