lkml.org 
[lkml]   [2019]   [Jun]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRE: [RFC PATCH 7/9] x86/sgx: Enforce noexec filesystem restriction for enclaves
Date
> From: Christopherson, Sean J
> Sent: Friday, May 31, 2019 4:32 PM
>
> Do not allow an enclave page to be mapped with PROT_EXEC if the source page is backed by a
> file on a noexec file system.
>
> Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
> ---
> arch/x86/kernel/cpu/sgx/driver/ioctl.c | 26 ++++++++++++++++++++++++--
> 1 file changed, 24 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/kernel/cpu/sgx/driver/ioctl.c
> b/arch/x86/kernel/cpu/sgx/driver/ioctl.c
> index c30acd3fbbdd..5f71be7cbb01 100644
> --- a/arch/x86/kernel/cpu/sgx/driver/ioctl.c
> +++ b/arch/x86/kernel/cpu/sgx/driver/ioctl.c
> @@ -576,6 +576,27 @@ static int __sgx_encl_add_page(struct sgx_encl *encl, unsigned long
> addr,
> return ret;
> }
>
> +static int sgx_encl_page_protect(unsigned long src, unsigned long prot,
> + unsigned long *allowed_prot)
> +{
> + struct vm_area_struct *vma;
> +
> + if (!(*allowed_prot & VM_EXEC))
> + goto do_check;
> +
> + down_read(&current->mm->mmap_sem);
> + vma = find_vma(current->mm, src);
> + if (!vma || (vma->vm_file && path_noexec(&vma->vm_file->f_path)))
> + *allowed_prot &= ~VM_EXEC;

Testing (vma->vm_flags & VM_MAYEXEC) == 0 should be a better approach.

Moreover, it looks like the check is done per page, so say 100 pages would cause this test to run 100 times even if they are within the same VMA. Wouldn't that be a bit inefficient?

> + up_read(&current->mm->mmap_sem);
> +
> +do_check:
> + if (prot & ~*allowed_prot)
> + return -EACCES;
> +
> + return 0;
> +}

\
 
 \ /
  Last update: 2019-06-03 08:30    [W:0.327 / U:0.300 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site