Internals should not have direct bindings to the ioctl API. Therefore, unpack &sgx_enclave_add_pages and pass its fields as separate parameters to sgx_enclave_add_page(). This will also remove an inconsistency: secinfo is already passed as a separate parameter whereas other fields are read from the struct. Cc: Sean Christopherson <sean.j.christopherson@xxxxxxxxx> Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@xxxxxxxxxxxxxxx> --- arch/x86/kernel/cpu/sgx/ioctl.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/arch/x86/kernel/cpu/sgx/ioctl.c b/arch/x86/kernel/cpu/sgx/ioctl.c index a2b411a8236d..f08008bef943 100644 --- a/arch/x86/kernel/cpu/sgx/ioctl.c +++ b/arch/x86/kernel/cpu/sgx/ioctl.c @@ -360,16 +360,16 @@ static int __sgx_encl_extend(struct sgx_encl *encl, return 0; } -static int sgx_encl_add_page(struct sgx_encl *encl, - struct sgx_enclave_add_pages *addp, - struct sgx_secinfo *secinfo) +static int sgx_encl_add_page(struct sgx_encl *encl, unsigned long src, + unsigned long offset, unsigned long length, + struct sgx_secinfo *secinfo, unsigned long flags) { struct sgx_encl_page *encl_page; struct sgx_epc_page *epc_page; struct sgx_va_page *va_page; int ret; - encl_page = sgx_encl_page_alloc(encl, addp->offset, secinfo->flags); + encl_page = sgx_encl_page_alloc(encl, offset, secinfo->flags); if (IS_ERR(encl_page)) return PTR_ERR(encl_page); @@ -412,7 +412,7 @@ static int sgx_encl_add_page(struct sgx_encl *encl, goto err_out_unlock; ret = __sgx_encl_add_page(encl, encl_page, epc_page, secinfo, - addp->src); + src); if (ret) { /* ENCLS failure. */ if (ret == -EIO) @@ -430,7 +430,7 @@ static int sgx_encl_add_page(struct sgx_encl *encl, encl_page->epc_page = epc_page; encl->secs_child_cnt++; - if (addp->flags & SGX_PAGE_MEASURE) { + if (flags & SGX_PAGE_MEASURE) { ret = __sgx_encl_extend(encl, epc_page); /* ENCLS failure. */ @@ -547,7 +547,8 @@ static long sgx_ioc_enclave_add_pages(struct sgx_encl *encl, void __user *arg) if (need_resched()) cond_resched(); - ret = sgx_encl_add_page(encl, &addp, &secinfo); + ret = sgx_encl_add_page(encl, addp.src, addp.offset, + addp.length, &secinfo, addp.flags); if (ret) break; -- 2.20.1