From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 97E78C636D3 for ; Sat, 4 Feb 2023 04:06:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3EC816B0074; Fri, 3 Feb 2023 23:06:53 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 36E796B007B; Fri, 3 Feb 2023 23:06:53 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0FDAD6B0075; Fri, 3 Feb 2023 23:06:52 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id CB1C56B0075 for ; Fri, 3 Feb 2023 23:06:52 -0500 (EST) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 98341C03DF for ; Sat, 4 Feb 2023 04:06:52 +0000 (UTC) X-FDA: 80428273464.21.6BD7F56 Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by imf21.hostedemail.com (Postfix) with ESMTP id 820C21C0003 for ; Sat, 4 Feb 2023 04:06:50 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b="Kba6PoV/"; spf=pass (imf21.hostedemail.com: domain of ira.weiny@intel.com designates 134.134.136.31 as permitted sender) smtp.mailfrom=ira.weiny@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1675483610; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=mvBhkDwkOcgBEUaLsuOh/CJ+6znA0KCaF8HAFCAqOgU=; b=AoM6K0LihlWpGsOcQ+dJTazlqvOHJWlhLoV5eu4rQvKaOhQ2epZIARQjZMrXXqChzfA/wo U/YldnPJ++pc1XUYPhVlVsPnL30LiRIH0r7kpPfsCIznJOCqTxMstYYXsil4RdNeHEbAo1 hy14XxZ23g1eNUS3/Rv3bNRziv57sAk= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b="Kba6PoV/"; spf=pass (imf21.hostedemail.com: domain of ira.weiny@intel.com designates 134.134.136.31 as permitted sender) smtp.mailfrom=ira.weiny@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1675483610; a=rsa-sha256; cv=none; b=Nnkm3XBhEemkOinJfEARpYNLJM4118wYL1UQq61BMz/ZLV1gX8FjvI5Xk5CXcXV8BKK09R a41MOkHvSbYOfUAzdWwUejd/14wGcGtnCFSH3DVcird+oNYd7238svY5YXNwlYfO+ObSMQ 9omOufipDQ1dDH893rnCdlnHwl1PZg4= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1675483610; x=1707019610; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=JQRhs8fV+wugaMbuU/xsYw9mo1fl9vkSLqCGXzy9tz8=; b=Kba6PoV/VGGmY/+Hli75SQWZkwzpheJr7ktIit3+KFvEVUqxxeOYdIsJ GsrXN+p8bK72qldZ0cUa6d2N0md1TJxyTU1bM5V7uh07kGycEaxc5KqDw JwaZxjMlK9rSC119BrIIqrZkscSnkT4nCx/ReRw+KrVDaTvkMIDOzVvmD 3ifH3anQbbYjF1SS9BLrAQZ9jviYM0GW+92u2b9jdPJB/sFoU066zIhcz oZ9HuVv2DgOiqNw3rtlNcBkDYNxMd1gUroz0NlbgyXnMFkFsRAXIyunSI V5HzX82m4tmWNpQj0isUb35XPe3RI7QhX4W8OPpNzKAbeZg9UmaB8wyVh w==; X-IronPort-AV: E=McAfee;i="6500,9779,10610"; a="391309386" X-IronPort-AV: E=Sophos;i="5.97,272,1669104000"; d="scan'208";a="391309386" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Feb 2023 20:06:49 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10610"; a="734573743" X-IronPort-AV: E=Sophos;i="5.97,272,1669104000"; d="scan'208";a="734573743" Received: from iweiny-mobl.amr.corp.intel.com (HELO localhost) ([10.209.125.166]) by fmsmga004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Feb 2023 20:06:48 -0800 From: Ira Weiny Date: Fri, 03 Feb 2023 20:06:34 -0800 Subject: [PATCH v2 3/4] tee: Remove call to get_kernel_pages() MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20230203-get_kernel_pages-v2-3-f1dc4af273f1@intel.com> References: <20230203-get_kernel_pages-v2-0-f1dc4af273f1@intel.com> In-Reply-To: <20230203-get_kernel_pages-v2-0-f1dc4af273f1@intel.com> To: Sumit Garg , Andrew Morton Cc: Al Viro , Christoph Hellwig , linux-kernel@vger.kernel.org, op-tee@lists.trustedfirmware.org, linux-mm@kvack.org, Jens Wiklander , "Fabio M. De Francesco" , Ira Weiny , John Hubbard , Linus Torvalds X-Mailer: b4 0.12-dev-cc11a X-Developer-Signature: v=1; a=ed25519-sha256; t=1675483603; l=2426; i=ira.weiny@intel.com; s=20221211; h=from:subject:message-id; bh=JQRhs8fV+wugaMbuU/xsYw9mo1fl9vkSLqCGXzy9tz8=; b=AaCtTJ4OiWZ81WHjyg8HuDS5/qjKjXFczxneo+wuWXA1er0d3AbqF8WmVH8OPaOMT7MFHfqplc4h 8SdcI7hmA9jv/b3bsJlcrP/twziO9uzdZVNnfM9Qbjeiy1zfFBMX X-Developer-Key: i=ira.weiny@intel.com; a=ed25519; pk=noldbkG+Wp1qXRrrkfY1QJpDf7QsOEthbOT7vm0PqsE= X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 820C21C0003 X-Stat-Signature: qh5k8z3zabxhjxr5oitad8ncodsq7i9m X-HE-Tag: 1675483610-191951 X-HE-Meta: U2FsdGVkX1/MivYSTDiyIDX/aJgPyGECGhZJ9FuDnhh5tf+zPNnzzlEx8YMqNnrApnFgl+RKx8BKJie6rGeaXb2WqTQQMKx/YEe0HnMDlQGwYK0j58PjY1mR0db/PryVvb8l0X3ngT3hZ3D6RADvWpIuD3NFKSorU30WtenKobPT+LsuqK0SHusR58AMMoMp4Ai4sdXIAE4Lk9SdlX7tw5wqTwk1tiH2ovSIx8RQcBPfebcCdGEf2tMiRkda3WCurSrWWZKqUwfEgkFHwd70HhOpj730Vey//HYt6KWtSuaUWUDoKCUEUlacG5TGpfg8u1FgXJ1XpdrHCuDibd1FNAaS687oXL8rswZVETPvkLaYftCDE2/gdGbcjyfCXjtr2xbMUNM4MSle7wcHfOtR/GrMhajlYcw5t1VTirc/1sCPNl5G0Ga4LUysQrEKpPXGUnBRkLuGhkKDTP2Sp0vOyozAjT+XqBNJ5ufT41Tibl1y5QLEzlNLL33HpDDSOB5SAJOg4RumA2X9NFBmTQ0dcIoPYUzDlErnngdIp+SqNaeNbhpQi3psUnICJM5eGCfF1zl8U9FvEo6aKO0ukN6whKXCFwIH1OpGBUv4LkaEGM15TxK6ODQXBOHNMmi1RyzyyPpbRF4YIHAQA+g2niW28v2mka9Ph6MTNG3eKOw5O4jEvjdYWvnXjGo2EE5rU+KIcjXGM82AMVB9UpyvZKprsS+pZcJXscSfEZVsor6EkRdvBC2r0iHypV4NHCUgHBe/2Cg2AbgzXxL0KgJMggaYwAseriGfUef2VLSsismyuoqJFJnk2KgMqjLrTfYguyvMXQu6ow7YB6OnoNAIGR2GzLigjy7GTlPc6S4oBCy7Sr13SCifUBHMfSly5s+iNlnA9VIzG/yeEEIjUWNZd7bCsLOr0poaI+myZkoNg5of9ssyTW3MoWsf/bhcYqyerNQf3+fEVEOvhyhQ6jEWjTU 2uKSYa50 pt7cV6C6Vh0qseRGqYNKyslgflScNII6L+7j22KuEfK4zQKNagLropEZbe694gOqlWfNm1hRL+kYoz7WwFvMGCd/0X3zyFDTXzkQvNG28xxI3aV4m3axP1rokfAffToCJczbKKdeL8dlaLLhfeXY3mfkyaSmbX2eTlkcjunuLL7XTqzgx4Tmdm1bbHrmJYT/LwDZrKpy/8A8xRtslhcsUk0Y+rMzclpwq2/Z2v0dxxPG8OiUZ/caI2BlKy4gnLmUR6wsEngZhRCOVA5u9TOZ7KkcB/ns8yAOigjFFnFiV3zzNxMH0tqy31V9km6721TkfWiU8AA71wmdwKYTkie/j3rInEEDx52gSiLBAp3sXKqwu/Io90Rk3nmEBcP8md9F2tSNC5t0+oaTmKG/m0XpsCQ6gkBlqhLG0y30YZ06Qe8/7GFT+uHoCJL4H3g== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: 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() Because the pages can't be from highmem get_kernel_pages() boils down to a get_page() call. Remove the get_kernel_pages() call and open code the get_page(). In case a highmem page does slip through warn on once for a kmap'ed address. Cc: Jens Wiklander Cc: Al Viro Cc: "Fabio M. De Francesco" Cc: Christoph Hellwig Cc: Linus Torvalds Signed-off-by: Ira Weiny --- Changes from v1: Al/Christoph: Remove kiov altogether --- drivers/tee/tee_shm.c | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c index 527a6eabc03e..b1c6231defad 100644 --- a/drivers/tee/tee_shm.c +++ b/drivers/tee/tee_shm.c @@ -11,6 +11,7 @@ #include #include #include +#include #include "tee_private.h" static void shm_put_kernel_pages(struct page **pages, size_t page_count) @@ -24,26 +25,20 @@ 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; + struct page *page; size_t n; - int rc; - if (WARN_ON_ONCE(is_vmalloc_addr((void *)start))) + if (WARN_ON_ONCE(is_vmalloc_addr((void *)start) || + is_kmap_addr((void *)start))) return -EINVAL; - kiov = kcalloc(page_count, sizeof(*kiov), GFP_KERNEL); - if (!kiov) - return -ENOMEM; - + page = virt_to_page(start); for (n = 0; n < page_count; n++) { - kiov[n].iov_base = (void *)(start + n * PAGE_SIZE); - kiov[n].iov_len = PAGE_SIZE; + pages[n] = page + n; + get_page(pages[n]); } - rc = get_kernel_pages(kiov, page_count, 0, pages); - kfree(kiov); - - return rc; + return page_count; } static void release_registered_pages(struct tee_shm *shm) -- 2.39.1