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 6E8B8D44162 for ; Tue, 19 Nov 2024 14:25:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EE30F6B0095; Tue, 19 Nov 2024 09:25:12 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E933B6B0096; Tue, 19 Nov 2024 09:25:12 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D5B3E6B0098; Tue, 19 Nov 2024 09:25:12 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id B70256B0095 for ; Tue, 19 Nov 2024 09:25:12 -0500 (EST) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 68B461204D5 for ; Tue, 19 Nov 2024 14:25:12 +0000 (UTC) X-FDA: 82803066318.02.E6CA818 Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by imf10.hostedemail.com (Postfix) with ESMTP id 7B1F0C001B for ; Tue, 19 Nov 2024 14:24:48 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=linuxfoundation.org header.s=korg header.b="0VqBRP7/"; dmarc=pass (policy=none) header.from=linuxfoundation.org; spf=pass (imf10.hostedemail.com: domain of gregkh@linuxfoundation.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=gregkh@linuxfoundation.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1732026176; a=rsa-sha256; cv=none; b=PSZplWvWKEVw7GMS31k60YTEE9uNj8X/uXnoxj0MIcfOpZ5Ln5SxhG/zlr0BrgrX8nXfNo cbgu7uLnaKVw9RowUOf1j5Lw8B0EDknmXnQYFKahPaoROz2wYV9pW+rGsQBPlpMejUtW7o jdFracuB3Nj/Tm12YI+mKxKg1YeKA1U= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=linuxfoundation.org header.s=korg header.b="0VqBRP7/"; dmarc=pass (policy=none) header.from=linuxfoundation.org; spf=pass (imf10.hostedemail.com: domain of gregkh@linuxfoundation.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=gregkh@linuxfoundation.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1732026176; 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:dkim-signature; bh=zAT/Ze/8SGcv3NKUkGFFDpF7YxYB63ihsnjK75Ime04=; b=jo4LJLH5xZoDqQbFteN4HGj0AxWInqPoVF2qL9w6EpGH65bCsyb+fsyEuVY+MVjQKb4cSf U7UutdGzEpP1rdvzpUOaJE+04Q19ryIZlHtWmXioFZcKlTNqGP3mzNv3K3OQSCwT72K+ZT 8dtC2piETeOWjby4eAAKMrSw8txd/ns= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 8FF43A42AB3; Tue, 19 Nov 2024 14:23:16 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id AC7CDC4CECF; Tue, 19 Nov 2024 14:25:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1732026309; bh=jjiQaHTziKUGkRYP8Nb7OMLqtwyl52VSh4UnX7JXiY8=; h=Subject:To:Cc:From:Date:In-Reply-To:From; b=0VqBRP7/inUaHgjkSckiQh97PGIpsxuDMClffAkLGcFTcVukGA8uuXQOO0SbPmUWA t/F3tKXZVkU5wk1wuDOp+PQMzHt2dJNFym51JI8gsoSIDfz5q8gtRKpHClCOXbGT/f WVGwiXDHa6R2pvXNgWwj8j2Mof6iUreEc/KaFcac= Subject: Patch "mm: refactor arch_calc_vm_flag_bits() and arm64 MTE handling" has been added to the 5.10-stable tree To: James.Bottomley@HansenPartnership.com,Liam.Howlett@oracle.com,akpm@linux-foundation.org,andreas@gaisler.com,broonie@kernel.org,catalin.marinas@arm.com,davem@davemloft.net,deller@gmx.de,gregkh@linuxfoundation.org,jannh@google.com,linux-mm@kvack.org,lorenzo.stoakes@oracle.com,peterx@redhat.com,torvalds@linux-foundation.org,vbabka@suse.cz,will@kernel.org Cc: From: Date: Tue, 19 Nov 2024 15:24:37 +0100 In-Reply-To: Message-ID: <2024111937-unlined-legwarmer-20bf@gregkh> MIME-Version: 1.0 Content-Type: text/plain; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: 8bit X-stable: commit X-Patchwork-Hint: ignore X-Rspamd-Queue-Id: 7B1F0C001B X-Stat-Signature: inqgoptnqswjqut83wdatidxmr85h8ep X-Rspam-User: X-Rspamd-Server: rspam05 X-HE-Tag: 1732026288-483943 X-HE-Meta: U2FsdGVkX18pmlVrt95YTcaOl4lDfRYinj7dcIX3Pxx+bqmWDd25SYymaVR3X3oUtOlT7Kb/vd1qbpdy8nHS1NHZHbsutD2WgCt2BmMZjOYBMBOjOOeuXyRBcBAE7y6h5FE9DL46JLaHcMRRZt8YFA4Taw2y9eADbfys+XlLkzn0o72sDYz0EnkiJDfeQO3ttKoi2O2zOitizd+iqil1rjiyPBT5a3B70HSu0GK876Ff4cpDzxHSkKixEuNbEpxFkbmKgJMzGRuSLILSkwrpsuGWdjbohu/R4twqdKA3xmo1hrHRMet/RQTemG5z9ZQiyG9I4F1O1eAH6VCIkUELdvpCxPsEksK6Y1RhXV2CiN9opWMGmaAOcCiY9D62s8eVrhUGyITY25nN+1crVwRmyMVhfZakzY+h4c4x0fnDfADY6ZGdDeNR9JbZFhH5EXMofZJIPqho/cJykNRhn4VSK8aW2zmnm1/+6UNqTZFKbFNqLs8YmdhPGxICbKHMebWAKiJja6wz3CaqHaJCSb+RS6IYzpKQOdGqSGrAqV2ZRns/lzQZQ4TC7YQEQhjZT0uPO7EoeufkczPyVjfw1RpWzQDCw9E4oI7/wMvY+Zf+lkGenWkxOWpbzDyM61bw4Vl9R4IAsnfv4Q7TH0x7egzQkx73+aoQp0TDhjtRmmURhoDWBrQWV9yWCKlv/QO6R8e8nTLeTBwQKfzdVVUqXgkz6vvJKok4ccs8EU0iMCQEb0EypaVeJSUkG9Ihrz4mqvA/b02ZcU0zqdWY6nYZuDCxSTIhXxYWMnxmzLy8dhBhzSMO3ctcU6ZZ7sIOsZfHXO8DxLNE9ifKvnsuEZbVWcRpSyfyFeaCW0dA/8wfwRHyCKaPEV/JF01h2481YI/TwvuJfoA7VadP1MV2URcy6AMbJJHQ3Usi0w3mXGbMw5d2e9Us25JYrcvP/hOs3GLbdoRxP1AjYhWBbQjC8iWqqlM zjx1KYfc mPae2x+rZTzOpBmL0ozbDZud8zaNFs3iX/IjVz6RyR4Nr3P4rVpFfbgvpAbRYunDq7hrrUhHFfZVN1FpitpCcPYtDwU5lm9PEHSjkcFljuJcCjyz0NfqIR0CNQjxDo8cEinR93WoDvUntKu4UJGYqE9zHj0SmUQoCMeTBJb6vGFfiT/SJ5gBOEd1bwHizhCxDsAAEK/EwBwsvtcK56Dp9CW6hNPOhZTCW36S/F3wGm8xV7ftgtFFQWPPM1z1nzAQwM4yW6XJOMJjC3my8QY70r93kIgI/Dp3UJuL/SRje8B9gmKVM1DGYwHSUjt5yqp39Kxu6hRfMKkpxkeTWmJnlK6YGWrGODaE+CIsxg8iuFtYIF550T/zTrkBOQ4QwAk2OxC/FPNQ1ll33Ltk3ycBxMiuTyia59NtAJ/1iIZ7IqJjQlmjSn2Oz3Y7ZWBe+79doV/wCYvuImMgKNckwfJ2gvQ2RWeskAC7O8pCN91d0/S9uMqBxndduJ49IkHQ1cdgf9DsoEHm9aQJSNgoplCeVY4QFZYuqkKI9lx9mdGq0/fUe9CFDhwInEkhQ5PicgogESCzUc975dZr7mvDGkbwQ0RGkITpI8QnWqEjyqUUXvFkCpk8i0s5TLDtBtNzgs7oiWTMlg55YTLTJodRO7kdg3DoYNPultDco+S/QrHZLxcOGVOzRSuanwe1wUqRUFvmqD1hwfInKMjzSLJr3TN0g1Rm8+kKSt+kHkctHB7vcOAib3L675MN/14SZujVIEukoI6nL0kjR6sq1C7+EPlU5pIVBuWS6BRXZ2+DwKxXQWW9emodxFD1bBhm4WfXq75PQfb/YlAfoZfNfxOjPwXTQhdZG3HkZAR2KaBIQlDgZ75Dfu89KIXRuGyjKdZHi5IeYoBdKcN92mYXqiftQY3KksjFPvg== 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: This is a note to let you know that I've just added the patch titled mm: refactor arch_calc_vm_flag_bits() and arm64 MTE handling to the 5.10-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: mm-refactor-arch_calc_vm_flag_bits-and-arm64-mte-handling.patch and it can be found in the queue-5.10 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let know about it. >From stable+bounces-93522-greg=kroah.com@vger.kernel.org Fri Nov 15 13:38:03 2024 From: Lorenzo Stoakes Date: Fri, 15 Nov 2024 12:36:53 +0000 Subject: mm: refactor arch_calc_vm_flag_bits() and arm64 MTE handling To: stable@vger.kernel.org Cc: Andrew Morton , "Liam R . Howlett" , Vlastimil Babka , Jann Horn , linux-kernel@vger.kernel.org, linux-mm@kvack.org, Linus Torvalds , Peter Xu , Catalin Marinas , Will Deacon , Mark Brown , "David S . Miller" , Andreas Larsson , "James E . J . Bottomley" , Helge Deller Message-ID: From: Lorenzo Stoakes [ Upstream commit 5baf8b037debf4ec60108ccfeccb8636d1dbad81 ] Currently MTE is permitted in two circumstances (desiring to use MTE having been specified by the VM_MTE flag) - where MAP_ANONYMOUS is specified, as checked by arch_calc_vm_flag_bits() and actualised by setting the VM_MTE_ALLOWED flag, or if the file backing the mapping is shmem, in which case we set VM_MTE_ALLOWED in shmem_mmap() when the mmap hook is activated in mmap_region(). The function that checks that, if VM_MTE is set, VM_MTE_ALLOWED is also set is the arm64 implementation of arch_validate_flags(). Unfortunately, we intend to refactor mmap_region() to perform this check earlier, meaning that in the case of a shmem backing we will not have invoked shmem_mmap() yet, causing the mapping to fail spuriously. It is inappropriate to set this architecture-specific flag in general mm code anyway, so a sensible resolution of this issue is to instead move the check somewhere else. We resolve this by setting VM_MTE_ALLOWED much earlier in do_mmap(), via the arch_calc_vm_flag_bits() call. This is an appropriate place to do this as we already check for the MAP_ANONYMOUS case here, and the shmem file case is simply a variant of the same idea - we permit RAM-backed memory. This requires a modification to the arch_calc_vm_flag_bits() signature to pass in a pointer to the struct file associated with the mapping, however this is not too egregious as this is only used by two architectures anyway - arm64 and parisc. So this patch performs this adjustment and removes the unnecessary assignment of VM_MTE_ALLOWED in shmem_mmap(). [akpm@linux-foundation.org: fix whitespace, per Catalin] Link: https://lkml.kernel.org/r/ec251b20ba1964fb64cf1607d2ad80c47f3873df.1730224667.git.lorenzo.stoakes@oracle.com Fixes: deb0f6562884 ("mm/mmap: undo ->mmap() when arch_validate_flags() fails") Signed-off-by: Lorenzo Stoakes Suggested-by: Catalin Marinas Reported-by: Jann Horn Reviewed-by: Catalin Marinas Reviewed-by: Vlastimil Babka Cc: Andreas Larsson Cc: David S. Miller Cc: Helge Deller Cc: James E.J. Bottomley Cc: Liam R. Howlett Cc: Linus Torvalds Cc: Mark Brown Cc: Peter Xu Cc: Will Deacon Cc: Signed-off-by: Andrew Morton Signed-off-by: Lorenzo Stoakes Signed-off-by: Greg Kroah-Hartman --- arch/arm64/include/asm/mman.h | 10 +++++++--- include/linux/mman.h | 7 ++++--- mm/mmap.c | 2 +- mm/nommu.c | 2 +- mm/shmem.c | 3 --- 5 files changed, 13 insertions(+), 11 deletions(-) --- a/arch/arm64/include/asm/mman.h +++ b/arch/arm64/include/asm/mman.h @@ -3,6 +3,8 @@ #define __ASM_MMAN_H__ #include +#include +#include #include #include @@ -21,19 +23,21 @@ static inline unsigned long arch_calc_vm } #define arch_calc_vm_prot_bits(prot, pkey) arch_calc_vm_prot_bits(prot, pkey) -static inline unsigned long arch_calc_vm_flag_bits(unsigned long flags) +static inline unsigned long arch_calc_vm_flag_bits(struct file *file, + unsigned long flags) { /* * Only allow MTE on anonymous mappings as these are guaranteed to be * backed by tags-capable memory. The vm_flags may be overridden by a * filesystem supporting MTE (RAM-based). */ - if (system_supports_mte() && (flags & MAP_ANONYMOUS)) + if (system_supports_mte() && + ((flags & MAP_ANONYMOUS) || shmem_file(file))) return VM_MTE_ALLOWED; return 0; } -#define arch_calc_vm_flag_bits(flags) arch_calc_vm_flag_bits(flags) +#define arch_calc_vm_flag_bits(file, flags) arch_calc_vm_flag_bits(file, flags) static inline pgprot_t arch_vm_get_page_prot(unsigned long vm_flags) { --- a/include/linux/mman.h +++ b/include/linux/mman.h @@ -2,6 +2,7 @@ #ifndef _LINUX_MMAN_H #define _LINUX_MMAN_H +#include #include #include @@ -87,7 +88,7 @@ static inline void vm_unacct_memory(long #endif #ifndef arch_calc_vm_flag_bits -#define arch_calc_vm_flag_bits(flags) 0 +#define arch_calc_vm_flag_bits(file, flags) 0 #endif #ifndef arch_vm_get_page_prot @@ -148,13 +149,13 @@ calc_vm_prot_bits(unsigned long prot, un * Combine the mmap "flags" argument into "vm_flags" used internally. */ static inline unsigned long -calc_vm_flag_bits(unsigned long flags) +calc_vm_flag_bits(struct file *file, unsigned long flags) { return _calc_vm_trans(flags, MAP_GROWSDOWN, VM_GROWSDOWN ) | _calc_vm_trans(flags, MAP_DENYWRITE, VM_DENYWRITE ) | _calc_vm_trans(flags, MAP_LOCKED, VM_LOCKED ) | _calc_vm_trans(flags, MAP_SYNC, VM_SYNC ) | - arch_calc_vm_flag_bits(flags); + arch_calc_vm_flag_bits(file, flags); } unsigned long vm_commit_limit(void); --- a/mm/mmap.c +++ b/mm/mmap.c @@ -1468,7 +1468,7 @@ unsigned long do_mmap(struct file *file, * to. we assume access permissions have been handled by the open * of the memory object, so we don't do any here. */ - vm_flags = calc_vm_prot_bits(prot, pkey) | calc_vm_flag_bits(flags) | + vm_flags = calc_vm_prot_bits(prot, pkey) | calc_vm_flag_bits(file, flags) | mm->def_flags | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC; if (flags & MAP_LOCKED) --- a/mm/nommu.c +++ b/mm/nommu.c @@ -919,7 +919,7 @@ static unsigned long determine_vm_flags( { unsigned long vm_flags; - vm_flags = calc_vm_prot_bits(prot, 0) | calc_vm_flag_bits(flags); + vm_flags = calc_vm_prot_bits(prot, 0) | calc_vm_flag_bits(file, flags); /* vm_flags |= mm->def_flags; */ if (!(capabilities & NOMMU_MAP_DIRECT)) { --- a/mm/shmem.c +++ b/mm/shmem.c @@ -2267,9 +2267,6 @@ static int shmem_mmap(struct file *file, if (ret) return ret; - /* arm64 - allow memory tagging on RAM-based files */ - vma->vm_flags |= VM_MTE_ALLOWED; - file_accessed(file); vma->vm_ops = &shmem_vm_ops; if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) && Patches currently in stable-queue which might be from lorenzo.stoakes@oracle.com are queue-5.10/mm-resolve-faulty-mmap_region-error-path-behaviour.patch queue-5.10/mm-refactor-arch_calc_vm_flag_bits-and-arm64-mte-handling.patch queue-5.10/mm-unconditionally-close-vmas-on-error.patch queue-5.10/mm-avoid-unsafe-vma-hook-invocation-when-error-arises-on-mmap-hook.patch