> From: Christopherson, Sean J
> Sent: Friday, May 31, 2019 4:32 PM
> 
> ...to support (the equivalent) of existing Linux Security Module 
> functionality.
> 
> Because SGX manually manages EPC memory, all enclave VMAs are backed by the 
> same vm_file,
> i.e. /dev/sgx/enclave, so that SGX can implement the necessary hooks to move 
> pages in/out
> of the EPC.  And because EPC pages for any given enclave are fundamentally 
> shared between
> processes, i.e.
> CoW semantics are not possible with EPC pages, /dev/sgx/enclave must always 
> be MAP_SHARED.
> Lastly, all real world enclaves will need read, write and execute permissions 
> to EPC pages.
> As a result, SGX does not play nice with existing LSM behavior as it is 
> impossible to
> apply policies to enclaves with any reasonable granularity, e.g. an LSM can 
> deny access to
> EPC altogether, but can't deny potentially dangerous behavior such as mapping 
> pages RW->RW
> or RWX.
> 
> To give LSMs enough information to implement their policies without having to 
> resort to
> ugly things, e.g. holding a reference to the vm_file of each enclave page, 
> require
> userspace to explicitly state the allowed protections for each page (region), 
> i.e. take
> ALLOW_{READ,WRITE,EXEC} in the ADD_PAGES ioctl.
> 
> The ALLOW_* flags will be passed to LSMs so that they can make informed 
> decisions when the
> enclave is being built, i.e. when the source vm_file is available.  For 
> example, SELinux's
> EXECMOD permission can be required if an enclave is requesting both 
> ALLOW_WRITE and
> ALLOW_EXEC.
> 
> Update the mmap()/mprotect() hooks to enforce the ALLOW_* protections, a la 
> the standard
> VM_MAY{READ,WRITE,EXEC} flags.
> 
> The ALLOW_EXEC flag also has a second (important) use in that it can be used 
> to prevent
> loading an enclave from a noexec file system, on
> SGX2 hardware (regardless of kernel support for SGX2), userspace could EADD 
> from a noexec
> path using read-only permissions and later mprotect() and ENCLU[EMODPE] the 
> page to gain
> execute permissions.  By requiring ALLOW_EXEC up front, SGX will be able to 
> enforce noexec
> paths when building the enclave.

ALLOW_* flags shall be kept internal to LSM.

This patch is completely unnecessary.

Reply via email to