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 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



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

  Powered by Linux