From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ira Weiny To: op-tee@lists.trustedfirmware.org Subject: [PATCH v2 2/4] tee: Remove vmalloc page support Date: Fri, 03 Feb 2023 20:06:33 -0800 Message-ID: <20230203-get_kernel_pages-v2-2-f1dc4af273f1@intel.com> In-Reply-To: <20230203-get_kernel_pages-v2-0-f1dc4af273f1@intel.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============8637779915035580011==" List-Id: --===============8637779915035580011== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable The kernel pages used by shm_get_kernel_pages() are allocated using GFP_KERNEL through the following call stack: trusted_instantiate() trusted_payload_alloc() -> GFP_KERNEL tee_shm_register_kernel_buf() register_shm_helper() shm_get_kernel_pages() Where is one of: trusted_key_unseal() trusted_key_get_random() trusted_key_seal() Remove the vmalloc page support from shm_get_kernel_pages(). Replace with a warn on once. Cc: Al Viro Cc: "Fabio M. De Francesco" Cc: Christoph Hellwig Cc: Linus Torvalds Reviewed-by: Jens Wiklander Signed-off-by: Ira Weiny --- drivers/tee/tee_shm.c | 36 ++++++++++++------------------------ 1 file changed, 12 insertions(+), 24 deletions(-) diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c index 27295bda3e0b..527a6eabc03e 100644 --- a/drivers/tee/tee_shm.c +++ b/drivers/tee/tee_shm.c @@ -24,37 +24,25 @@ static void shm_put_kernel_pages(struct page **pages, siz= e_t page_count) static int shm_get_kernel_pages(unsigned long start, size_t page_count, struct page **pages) { + struct kvec *kiov; size_t n; int rc; =20 - if (is_vmalloc_addr((void *)start)) { - struct page *page; - - for (n =3D 0; n < page_count; n++) { - page =3D vmalloc_to_page((void *)(start + PAGE_SIZE * n)); - if (!page) - return -ENOMEM; - - get_page(page); - pages[n] =3D page; - } - rc =3D page_count; - } else { - struct kvec *kiov; - - kiov =3D kcalloc(page_count, sizeof(*kiov), GFP_KERNEL); - if (!kiov) - return -ENOMEM; + if (WARN_ON_ONCE(is_vmalloc_addr((void *)start))) + return -EINVAL; =20 - for (n =3D 0; n < page_count; n++) { - kiov[n].iov_base =3D (void *)(start + n * PAGE_SIZE); - kiov[n].iov_len =3D PAGE_SIZE; - } + kiov =3D kcalloc(page_count, sizeof(*kiov), GFP_KERNEL); + if (!kiov) + return -ENOMEM; =20 - rc =3D get_kernel_pages(kiov, page_count, 0, pages); - kfree(kiov); + for (n =3D 0; n < page_count; n++) { + kiov[n].iov_base =3D (void *)(start + n * PAGE_SIZE); + kiov[n].iov_len =3D PAGE_SIZE; } =20 + rc =3D get_kernel_pages(kiov, page_count, 0, pages); + kfree(kiov); + return rc; } =20 --=20 2.39.1 --===============8637779915035580011==--