From patchwork Tue Feb 18 08:15:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maciej Wieczor-Retman X-Patchwork-Id: 13979245 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 E96D8C02198 for ; Tue, 18 Feb 2025 08:19:31 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5B39B2800F8; Tue, 18 Feb 2025 03:19:31 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 5616B2800EC; Tue, 18 Feb 2025 03:19:31 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3DAC12800F8; Tue, 18 Feb 2025 03:19:31 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 1D21A2800EC for ; Tue, 18 Feb 2025 03:19:31 -0500 (EST) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id C6B0DC09A1 for ; Tue, 18 Feb 2025 08:19:30 +0000 (UTC) X-FDA: 83132366100.27.79538B4 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by imf18.hostedemail.com (Postfix) with ESMTP id A57681C0004 for ; Tue, 18 Feb 2025 08:19:28 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=D+6NaU6P; spf=pass (imf18.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739866768; a=rsa-sha256; cv=none; b=XpgKMhs7zoNV9tbmYn/etKpeojOovDJd+oiafXzPO3eh/Kf0DMFYnURqT+CjSCJHcX7A9K bdz7Lk7eysfAqA4snPazsbNh+kASkNuoXje/eLeLTVoLORAm7Stf5/RsvA6TFTiYZHIi8W 2qnoS2oTW4oFPFRsGIZuzzGCgBTDt4Q= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=D+6NaU6P; spf=pass (imf18.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@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=1739866768; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Wa0dFcuZNks8+m78LqIF6+BNsI3gx1vfldLXivV4N3o=; b=XVa/dlAJNruBhmYE+bUrR9bVWBBdxBG83XvWPoD+Ic0vElPWxPeilM5oysiQdvB8Gwkw9P Mc9IDWmOfHDDwiQnw9nlHNidxDWQrnyLZFUkYygwVMuqBCON/b7dlsxcHk8/e0jwpvmCEM yhl67tuJqkPNUzO7ySOAnfwpL2JTXGk= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739866769; x=1771402769; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=8ws+/8lspNy+rR5tjQn0/4EjYnvKhOpPRaAw0LffmfQ=; b=D+6NaU6PkN5axv6chDOXlZJWghFBDFnZUWH6HKSfzPEpnQnzBje5uJJF w/SDvhm8wM7KkGXGrFmp1xDYWAtYja7dW5UKbxoXhttYZUAOqny3F/SZ3 GMDF0LCuOiHxWMJAh42RDEAzmXgTQ5swLC9i71PU7qwscBpbcO0efK0e8 ELT/Bg2K3iHvOTI3XiHFJQCQYLBezBfbvTtN/7XWbO3C1f02D/dMpGj7e cskJmUcul/XkBKV5lGqsii9iCVosijAMs0NiN+eDFE6xVkDo2+dLzUcrQ gc4sXN6bNVHy6YiddHTvoL2/VLybpcVuljvTqSk7KWSbfuEh2pw60R2j+ w==; X-CSE-ConnectionGUID: fs2DSByORkSWUgjOVOYrqA== X-CSE-MsgGUID: w/T/8NCxRU+gTCq5AxOvxA== X-IronPort-AV: E=McAfee;i="6700,10204,11348"; a="28150409" X-IronPort-AV: E=Sophos;i="6.13,295,1732608000"; d="scan'208";a="28150409" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:19:27 -0800 X-CSE-ConnectionGUID: 46KsSX6nShmB+6L3gB4eDg== X-CSE-MsgGUID: zDFh8fMPSzOB5kwIyeazag== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,199,1725346800"; d="scan'208";a="119247888" Received: from ijarvine-mobl1.ger.corp.intel.com (HELO wieczorr-mobl1.intel.com) ([10.245.245.49]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:19:09 -0800 From: Maciej Wieczor-Retman To: kees@kernel.org, julian.stecklina@cyberus-technology.de, kevinloughlin@google.com, peterz@infradead.org, tglx@linutronix.de, justinstitt@google.com, catalin.marinas@arm.com, wangkefeng.wang@huawei.com, bhe@redhat.com, ryabinin.a.a@gmail.com, kirill.shutemov@linux.intel.com, will@kernel.org, ardb@kernel.org, jason.andryuk@amd.com, dave.hansen@linux.intel.com, pasha.tatashin@soleen.com, ndesaulniers@google.com, guoweikang.kernel@gmail.com, dwmw@amazon.co.uk, mark.rutland@arm.com, broonie@kernel.org, apopple@nvidia.com, bp@alien8.de, rppt@kernel.org, kaleshsingh@google.com, richard.weiyang@gmail.com, luto@kernel.org, glider@google.com, pankaj.gupta@amd.com, andreyknvl@gmail.com, pawan.kumar.gupta@linux.intel.com, kuan-ying.lee@canonical.com, tony.luck@intel.com, tj@kernel.org, jgross@suse.com, dvyukov@google.com, baohua@kernel.org, samuel.holland@sifive.com, dennis@kernel.org, akpm@linux-foundation.org, thomas.weissschuh@linutronix.de, surenb@google.com, kbingham@kernel.org, ankita@nvidia.com, nathan@kernel.org, maciej.wieczor-retman@intel.com, ziy@nvidia.com, xin@zytor.com, rafael.j.wysocki@intel.com, andriy.shevchenko@linux.intel.com, cl@linux.com, jhubbard@nvidia.com, hpa@zytor.com, scott@os.amperecomputing.com, david@redhat.com, jan.kiszka@siemens.com, vincenzo.frascino@arm.com, corbet@lwn.net, maz@kernel.org, mingo@redhat.com, arnd@arndb.de, ytcoode@gmail.com, xur@google.com, morbo@google.com, thiago.bauermann@linaro.org Cc: linux-doc@vger.kernel.org, kasan-dev@googlegroups.com, linux-kernel@vger.kernel.org, llvm@lists.linux.dev, linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org, x86@kernel.org Subject: [PATCH v2 10/14] x86: KASAN raw shadow memory PTE init Date: Tue, 18 Feb 2025 09:15:26 +0100 Message-ID: <738373d32089fbf84a8c5d6f32ade1bf28d14020.1739866028.git.maciej.wieczor-retman@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: References: MIME-Version: 1.0 X-Rspamd-Queue-Id: A57681C0004 X-Stat-Signature: cwa8ezhz4wa5xnk1imfukd5wg1kyj6ij X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1739866768-986056 X-HE-Meta: U2FsdGVkX18b8SrbPT1l5tBgaOKmfKvefbA1KDVqOFqeJhD/7eoj3HUI7l0Yu+0eA1P1NpoKXlSCSN3PgB8NxRX4Isv7V/jRNrpECA+kTJiORnVmACoIaa/zhR3K0hAIEpmHk3QTuTM6gKBWY7yde6YJq3/3wFiOJtek7fHLJpbqZqzkFNiOo4xOdH8BcyWu4j9ZRPY0x8WsTZUK3D30sXl0gPkwRhr97gp9fTBJ7O7Fx/+yURSUMQjEJDbXEkYKPewnQt5Ekc5KKNCCxOBP9HksKkm3GdWONjgNRmD2KqoKVz1GXwHa3QgMaLC7uSpSCRpW8eKLg2475VslR3ex2924xTO3ESKM+PNx1jAWge60aitBUEMupp0zsFDk5xntjyJ5CqkKQRP1BMxDPSXApGmyWOJrJ3xYVQc/+q/Uw0vjZ3kNqPF0BOa5AnNBPkYUMPvLrrFuVMhAjOnwNw4B1/iAICvaZhRrMEpE2OLFHFUJDIt8alAVOYkK9LAeDgl6wrQsh8VWlXNHeqNmC7rvTYpudUpxjhd/qLxcKsaXoxbAF7+6Opc+DG6oTWc8DgiWA/y5aOagxHlPdHxeBg/llhTzGCKzuM6Ocnxkl0P5QtoCeHT8YceLHDy7xHkPWrBDshoxPGky107SafCVAleOfypK+6vGdKovgI75QTCugMHuxJfiWQ/EEcPsrKGCHgDbSXXRkkzT4Ze6sTdTOOpLa20Nz/ctvlo+JyBthk36sDGqd6F3SYBrNg0xa71QtqzPpff1sgDttMFWc/+PBF3/3rSvIqvT0Sy/J5zDlXLYbPG1ZDYJnCzW8pzTflhIwCmiYbcb8kI/XRq0LcjZ4BrwSc6xmjPgdy3CnAR6mDKPuQkUSEm1Mw+G/bKOIi8iPNP9OyQRYLNtkwtD/rWP7CGE3H8oqI+enfvPgrxJC32vurodwuQQUaHoyl4PLMqyMfDlqnkIesKmcTo0ah1Mgoo a8eATpVF ffdZgOYLVRmSrC9YAweq/2KNWyAATVO4v2yM+4hXwmfGhjiiwkEu0uuO9QF7xCe9hx9x6OdJ/VdtNPRqWzphdJAzssBeZnez1PE4sECXpoWI6tAxJaaYf1emg/EWAIGd1a3q5xZBk8sKyUth5bn+gNiyzOxNVBUet2jWid1eYUJpDv1jvKKhz9voKjJ0PdJ1C1T7IvE5OeUqqosTGuR26grsNVpQKd2p0Pm8JQO3OEDC1MixUhGJm5sjD2A== 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: List-Subscribe: List-Unsubscribe: In KASAN's generic mode the default value in shadow memory is zero. During initialization of shadow memory pages they are allocated and zeroed. In KASAN's tag-based mode the default tag for the arm64 architecture is 0xFE which corresponds to any memory that should not be accessed. On x86 (where tags are 4-bit wide instead of 8-bit wide) that tag is 0xE so during the initializations all the bytes in shadow memory pages should be filled with 0xE or 0xEE if two tags should be packed in one shadow byte. Use memblock_alloc_try_nid_raw() instead of memblock_alloc_try_nid() to avoid zeroing out the memory so it can be set with the KASAN invalid tag. Signed-off-by: Maciej Wieczor-Retman --- Changelog v2: - Remove dense mode references, use memset() instead of kasan_poison(). arch/x86/mm/kasan_init_64.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/arch/x86/mm/kasan_init_64.c b/arch/x86/mm/kasan_init_64.c index 9dddf19a5571..299a2144dac4 100644 --- a/arch/x86/mm/kasan_init_64.c +++ b/arch/x86/mm/kasan_init_64.c @@ -35,6 +35,18 @@ static __init void *early_alloc(size_t size, int nid, bool should_panic) return ptr; } +static __init void *early_raw_alloc(size_t size, int nid, bool should_panic) +{ + void *ptr = memblock_alloc_try_nid_raw(size, size, + __pa(MAX_DMA_ADDRESS), MEMBLOCK_ALLOC_ACCESSIBLE, nid); + + if (!ptr && should_panic) + panic("%pS: Failed to allocate page, nid=%d from=%lx\n", + (void *)_RET_IP_, nid, __pa(MAX_DMA_ADDRESS)); + + return ptr; +} + static void __init kasan_populate_pmd(pmd_t *pmd, unsigned long addr, unsigned long end, int nid) { @@ -64,8 +76,9 @@ static void __init kasan_populate_pmd(pmd_t *pmd, unsigned long addr, if (!pte_none(*pte)) continue; - p = early_alloc(PAGE_SIZE, nid, true); - entry = pfn_pte(PFN_DOWN(__pa(p)), PAGE_KERNEL); + p = early_raw_alloc(PAGE_SIZE, nid, true); + memset(p, PAGE_SIZE, KASAN_SHADOW_INIT); + entry = pfn_pte(PFN_DOWN(__pa_nodebug(p)), PAGE_KERNEL); set_pte_at(&init_mm, addr, pte, entry); } while (pte++, addr += PAGE_SIZE, addr != end); } @@ -437,7 +450,7 @@ void __init kasan_init(void) * it may contain some garbage. Now we can clear and write protect it, * since after the TLB flush no one should write to it. */ - memset(kasan_early_shadow_page, 0, PAGE_SIZE); + memset(kasan_early_shadow_page, KASAN_SHADOW_INIT, PAGE_SIZE); for (i = 0; i < PTRS_PER_PTE; i++) { pte_t pte; pgprot_t prot;