Commit c8390039 authored by Ira Weiny's avatar Ira Weiny Committed by Jens Wiklander
Browse files

tee: Remove vmalloc page support



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
	<trusted key op>
		tee_shm_register_kernel_buf()
			register_shm_helper()
				shm_get_kernel_pages()

Where <trusted key op> 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 <viro@zeniv.linux.org.uk>
Cc: "Fabio M. De Francesco" <fmdefrancesco@gmail.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Reviewed-by: default avatarJens Wiklander <jens.wiklander@linaro.org>
Signed-off-by: default avatarIra Weiny <ira.weiny@intel.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarSumit Garg <sumit.garg@linaro.org>
Signed-off-by: default avatarJens Wiklander <jens.wiklander@linaro.org>
parent f3837ab7
Loading
Loading
Loading
Loading
+12 −24
Original line number Diff line number Diff line
@@ -24,23 +24,12 @@ static void shm_put_kernel_pages(struct page **pages, size_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;

	if (is_vmalloc_addr((void *)start)) {
		struct page *page;

		for (n = 0; n < page_count; n++) {
			page = vmalloc_to_page((void *)(start + PAGE_SIZE * n));
			if (!page)
				return -ENOMEM;

			get_page(page);
			pages[n] = page;
		}
		rc = page_count;
	} else {
		struct kvec *kiov;
	if (WARN_ON_ONCE(is_vmalloc_addr((void *)start)))
		return -EINVAL;

	kiov = kcalloc(page_count, sizeof(*kiov), GFP_KERNEL);
	if (!kiov)
@@ -53,7 +42,6 @@ static int shm_get_kernel_pages(unsigned long start, size_t page_count,

	rc = get_kernel_pages(kiov, page_count, 0, pages);
	kfree(kiov);
	}

	return rc;
}