Re: [intel-sgx-kernel-dev] [PATCH RFC v3 07/12] intel_sgx: driver for Intel Software Guard Extensions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Oct 13, 2017 at 11:08:24PM +0300, Jarkko Sakkinen wrote:
> On Fri, Oct 13, 2017 at 11:02:53PM +0300, Jarkko Sakkinen wrote:
> > On Fri, Oct 13, 2017 at 10:58:49PM +0300, Jarkko Sakkinen wrote:
> > > On Tue, Oct 10, 2017 at 11:26:06AM -0700, Sean Christopherson wrote:
> > > > On Tue, Oct 10, 2017 at 05:32:53PM +0300, Jarkko Sakkinen wrote:
> > > > > diff --git a/drivers/platform/x86/intel_sgx/sgx_encl.c b/drivers/platform/x86/intel_sgx/sgx_encl.c
> > > > > new file mode 100644
> > > > > index 000000000000..aa0deed08cee
> > > > > --- /dev/null
> > > > > +++ b/drivers/platform/x86/intel_sgx/sgx_encl.c
> > > > > @@ -0,0 +1,989 @@
> > > > >
> > > > > +/**
> > > > > + * sgx_encl_find - find an enclave
> > > > > + * @mm:		mm struct of the current process
> > > > > + * @addr:	address in the ELRANGE
> > > > > + * @created	is the enclave already created?
> > > > > + * @vma:	the resulting VMA
> > > > > + *
> > > > > + * Finds an enclave identified by the given address. Gives back the VMA, that is
> > > > > + * part of the enclave, located in that address.
> > > > > + *
> > > > > + * Return:
> > > > > + * 0 on success,
> > > > > + * -EINVAL if not found,
> > > > > + */
> > > > > +int sgx_encl_find(struct mm_struct *mm, unsigned long addr, bool created,
> > > > > +		  struct vm_area_struct **vma)
> > > > > +{
> > > > > +	struct vm_area_struct *result;
> > > > > +	struct sgx_encl *encl;
> > > > > +
> > > > > +	result = find_vma(mm, addr);
> > > > > +	if (!result || result->vm_ops != &sgx_vm_ops || addr < result->vm_start)
> > > > > +		return -EINVAL;
> > > > > +
> > > > > +	encl = result->vm_private_data;
> > > > > +	if (created) {
> > > > > +		if (!encl)
> > > > > +			return -EINVAL;
> > > > > +	} else {
> > > > > +		if (encl)
> > > > > +			return -EINVAL;
> > > > > +	}
> > > > 
> > > > What about removing @created and returning -ENOENT (or -ENXIO?) if 
> > > > result->vm_private_data is NULL?  Removing @created will eliminate
> > > > any potential confusion for the common case of @created=true.  For
> > > > @created=false, which should be limited to sgx_encl_create, I think
> > > > that explicitly checking for "ret != -ENOENT" is more intuitive
> > > > than checking whether or not sgx_encl_find succeeded, e.g. I knew
> > > > the intent of the check in sgx_encl_create ahead of time and I still
> > > > had to walk through sgx_encl_find to verify the behavior.
> > > 
> > > Would make sense. Thank you.
> > > 
> > > /Jarkko
> > 
> > And in the case of ioctls (sgx_encl_get()) it would probably make sense
> > to deliver -ENOENT back to the user space instead of -EINVAL, wouldn't it?
> > 
> > /Jarkko
> 
> Please ignore this response! :-)
> 
> /Jarkko

Or actually why not. Does not harm to tell user space that it is an
enclave VMA but not yet created.

/Jarkko



[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux