Message ID | 20190808001254.11926-6-sean.j.christopherson@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | x86/sgx: Bug fixes for v22 | expand |
On Wed, Aug 07, 2019 at 05:12:48PM -0700, Sean Christopherson wrote: > Reject the EADD ioctl() if the source address provided by userspace is > not page aligned. Page alignment is required by hardware, but this is > not enforced on userspace as the kernel first copies the source page to > an internal (page aligned) buffer. Require the userspace address to be > page aligned so that the driver can, in the future, directly consume the > userspace address via EADD without breaking backwards compatibility, > e.g. to avoid the overhead of alloc+memcpy. > > Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com> Not sure about this. Why not just implement a fast path when the address is aligned (in future)? /Jarkko
diff --git a/arch/x86/kernel/cpu/sgx/driver/ioctl.c b/arch/x86/kernel/cpu/sgx/driver/ioctl.c index ae381bf4cfd7..11d90a31e7c2 100644 --- a/arch/x86/kernel/cpu/sgx/driver/ioctl.c +++ b/arch/x86/kernel/cpu/sgx/driver/ioctl.c @@ -600,7 +600,8 @@ static long sgx_ioc_enclave_add_page(struct file *filep, void __user *arg) if (copy_from_user(&addp, arg, sizeof(addp))) return -EFAULT; - if (!IS_ALIGNED(addp.addr, PAGE_SIZE)) + if (!IS_ALIGNED(addp.addr, PAGE_SIZE) || + !IS_ALIGNED(addp.src, PAGE_SIZE)) return -EINVAL; if (copy_from_user(&secinfo, (void __user *)addp.secinfo,
Reject the EADD ioctl() if the source address provided by userspace is not page aligned. Page alignment is required by hardware, but this is not enforced on userspace as the kernel first copies the source page to an internal (page aligned) buffer. Require the userspace address to be page aligned so that the driver can, in the future, directly consume the userspace address via EADD without breaking backwards compatibility, e.g. to avoid the overhead of alloc+memcpy. Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com> --- arch/x86/kernel/cpu/sgx/driver/ioctl.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)