On Fri, 9 Aug 2019 at 03:57, Stuart Yoder <stuart.yoder@xxxxxxx> wrote: > > > > On 7/30/19 7:23 AM, Sumit Garg wrote: > > > @@ -264,7 +266,17 @@ struct tee_shm *tee_shm_register(struct tee_context *ctx, unsigned long addr, > > goto err; > > } > > > > - rc = get_user_pages_fast(start, num_pages, FOLL_WRITE, shm->pages); > > + if (flags & TEE_SHM_USER_MAPPED) { > > + rc = get_user_pages_fast(start, num_pages, FOLL_WRITE, > > + shm->pages); > > + } else { > > + const struct kvec kiov = { > > + .iov_base = (void *)start, > > + .iov_len = PAGE_SIZE > > + }; > > + > > + rc = get_kernel_pages(&kiov, num_pages, 0, shm->pages); > > Passing a single kvec struct is temporary I assume? Because as currently > written this will only work with num_pages==1. > Ah, thanks Stuart for pointing this out. It should rather be an array of kvec struct. Will fix it in next version. -Sumit > Stuart