From patchwork Tue Jun 13 00:10:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Edgecombe, Rick P" X-Patchwork-Id: 13277719 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 41D25C7EE2E for ; Tue, 13 Jun 2023 00:12:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 843298E0006; Mon, 12 Jun 2023 20:12:16 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 81CC68E0003; Mon, 12 Jun 2023 20:12:16 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5D18D8E0006; Mon, 12 Jun 2023 20:12:16 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 4A20C8E0002 for ; Mon, 12 Jun 2023 20:12:16 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 15EEBC034E for ; Tue, 13 Jun 2023 00:12:16 +0000 (UTC) X-FDA: 80895797472.30.DC1A71A Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by imf08.hostedemail.com (Postfix) with ESMTP id E01AD160011 for ; Tue, 13 Jun 2023 00:12:13 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=UOHkNYU8; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf08.hostedemail.com: domain of rick.p.edgecombe@intel.com designates 134.134.136.65 as permitted sender) smtp.mailfrom=rick.p.edgecombe@intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1686615134; a=rsa-sha256; cv=none; b=LAayIiqYuCE6aEYBe4CFrwKUtoA9a8hgk+NgphCqkdvQk8c4J3bI9tD6U8TYeHg2GBZJhf 3nDtfI2fg+pJk9nP493sjY8mQpEOFDt41a3JdRI3tP0y2SuRGM/JOLjmUQepw4zAdyr/eH 30nMPW1V4L896A/pRJNcoHTzv7R8d3I= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=UOHkNYU8; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf08.hostedemail.com: domain of rick.p.edgecombe@intel.com designates 134.134.136.65 as permitted sender) smtp.mailfrom=rick.p.edgecombe@intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1686615134; 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=ueCxy0hEBQgGAIs/gsp+oRtbLmHLjLxT1XZ2AlFm+Qc=; b=Umar+BQ0cbeMjZeWsl0Ra9F0EdB722DZUCcMAOCfIH3RP4PDfBVRPnNVJIrTqvqH3cillu RHZent8cez1McHmgGWBa2SJAQ/rsHsIAtImVlo2QN8ggA2ZDKpPzQUHgsw/MrLnXnYuIgc 228ntiA8xO+6pa3e8miV3EePlHGSdwE= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1686615134; x=1718151134; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=tDE8EspiBAdPvpd4BkDoYawjxYWlY+HjRp9EjAaWS/U=; b=UOHkNYU8s60+ndDx0Z840KQix7bsE7IPs2RpuIxOqiXsw47+YSxcLd7W TZ/aN+IT8Uladv3o/kPWxyBaHCTo1U2xSkpHhXxp2vD4V5NjD4cRzCQGC UNfNPBOYlBtRw77oiPTbHgcb3xpbYKZOzzIdueE0OKETGt+QETc2F3qDb WTyh2E+nKg8GbllPSgNI3T3o7hJ/jsYhk5BPUNOEi1Cxqt6AvEKwXAl3q 3GUX941sGvEb2I8OKF8I7JesCJHlLYlVxI1ASdlmR4XdSbvTos0cC32zN 5usg0F8GxNn61GBQi2wkd7w8W7lVMQtTY0hUa2WXBQwAS7Jqmuwwg+ITM w==; X-IronPort-AV: E=McAfee;i="6600,9927,10739"; a="361556740" X-IronPort-AV: E=Sophos;i="6.00,238,1681196400"; d="scan'208";a="361556740" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jun 2023 17:12:09 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10739"; a="835670979" X-IronPort-AV: E=Sophos;i="6.00,238,1681196400"; d="scan'208";a="835670979" Received: from almeisch-mobl1.amr.corp.intel.com (HELO rpedgeco-desk4.amr.corp.intel.com) ([10.209.42.242]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jun 2023 17:12:08 -0700 From: Rick Edgecombe To: x86@kernel.org, "H . Peter Anvin" , Thomas Gleixner , Ingo Molnar , linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-arch@vger.kernel.org, linux-api@vger.kernel.org, Arnd Bergmann , Andy Lutomirski , Balbir Singh , Borislav Petkov , Cyrill Gorcunov , Dave Hansen , Eugene Syromiatnikov , Florian Weimer , "H . J . Lu" , Jann Horn , Jonathan Corbet , Kees Cook , Mike Kravetz , Nadav Amit , Oleg Nesterov , Pavel Machek , Peter Zijlstra , Randy Dunlap , Weijiang Yang , "Kirill A . Shutemov" , John Allen , kcc@google.com, eranian@google.com, rppt@kernel.org, jamorris@linux.microsoft.com, dethoma@microsoft.com, akpm@linux-foundation.org, Andrew.Cooper3@citrix.com, christina.schimpe@intel.com, david@redhat.com, debug@rivosinc.com, szabolcs.nagy@arm.com, torvalds@linux-foundation.org, broonie@kernel.org Cc: rick.p.edgecombe@intel.com, Yu-cheng Yu , Peter Collingbourne , Pengfei Xu Subject: [PATCH v9 04/42] mm: Re-introduce vm_flags to do_mmap() Date: Mon, 12 Jun 2023 17:10:30 -0700 Message-Id: <20230613001108.3040476-5-rick.p.edgecombe@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230613001108.3040476-1-rick.p.edgecombe@intel.com> References: <20230613001108.3040476-1-rick.p.edgecombe@intel.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: E01AD160011 X-Stat-Signature: 9s1j4ead71545dkz6cqmmu1zb76p3t5j X-HE-Tag: 1686615133-381743 X-HE-Meta: U2FsdGVkX1//u8F0H3uKdhutX7ucHK2nguZCnZI61n+IPsS4c6eXwGEcJIzcg15JLbT5RPMNf1189Q7/UyfywS+y+2CgJommg/T7L4kJQ7blkdAdugenDhqYCnIZejx+XlFzHiaFxCRugV0VpvKZaSHniCbPbcxsX2738vvl8GmgRHajfWBan3B6xJHnKYYGN4DKc+4Y0A2YW91hercfm+OCQN9WBhfc8yC9rmGRGtBdsXEr1DMnXre3kPwXXIfNkHAoLkmUaBChNm8inLFRlX1tLDAEl51IjuHMuzFN3O/dtRKfR7vd1U73uQmSdHnY9M/mcElcLM8a4wSnZP6gOp5az2T+0E0fmZOQBPu8g849WI67eyydhdEQPrkaQwwq8XN07ogsrDoreG1x4Q9+nPbEAjfAWcsI2w+M3u1LYYkPmTSoCBhBh3lbhXwo9Agk8XEZt723aIMY/WW6v69C/l05gcymk3LKKvDHeZcZj2ZTbFfRBdhA8qStTvy3NdWYgWWh5Uh/EJYNqbleVXJuY6VH/NpdY2WQ9SmL09gERxt0d6ALSX6Q5gEXU5G25c1ItL/10B1NGsvKCOg3EOYsJn4Mdf40q2xxy8H47aHt2g5ddhcDKWGjhQAVhIQEAP0T97qoiWObRvavYVTHl2I4KL4K+zjIVa8HuMF+RKKJ5Nj2cA9UmY5zFw6CqvJe3+3MsNmKn8VwZ8ui/emEGwDimmWOigdAu4AxQxdJb/caI8ZbGRRiIR5SUbzIMQoALjFUbVrlum/8qIWoWzd7ptx61ALf1c8EU5YEAeY3nj432fYpidfFKmByRYkvS6nvnOs2MGykBnqZgGtatphSux0olRC8Yr36Onoz8qEh+CO1wZ9JLkeoUt35LDOe+Lv2k8hQj12OHHqZZqyJzz0CGE1IlTsdz3p2+NzU3bwvw8zC/1BUk0nULXq/mrwKpsOPJD5i9Qw8w7zZJWgRvkr/+Fj 8O5WzagU WuVH7WXOWXr9yJozVFR879fUUwQX4Tta3q5/C/IUnx06jYG2yWRQi1qmbLD2ZysAuWbbdX6vlNB7v5WlcjY9cE7IzdD1J/q9bnw7sHSz0L0XKrzc+Q1+nFgDWam765Um4xNQUR63x2wWrIyo3WC2BI4r1Z7oV90NFNpWffUPUoyVu2GTyFysqN0l6qYXHJrtIKwvJcK+NkltRFkuxqbOQKYXgeNs28D92v9YeBvtojh+223nKeisR0f5GTFOdiCEoXpwt86pfUVgNO/xJiRByvdN9ikmTvTiHZX3JnoTHSMQ4S7v05HqLYeEhfAv7JVJ0Z7WfshfoKh3TaMEzgGQ7w2f+xmC+pmcObmimJI0PBhpwKVYdWIctZfwYxG1GowEvDfzio1bQfW+5GmqPrvW9CKt9kWmv4xGc5p6oq5kI56w5LwzfXB+cIS9qr2NNiipMqb1a 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: From: Yu-cheng Yu There was no more caller passing vm_flags to do_mmap(), and vm_flags was removed from the function's input by: commit 45e55300f114 ("mm: remove unnecessary wrapper function do_mmap_pgoff()"). There is a new user now. Shadow stack allocation passes VM_SHADOW_STACK to do_mmap(). Thus, re-introduce vm_flags to do_mmap(). Signed-off-by: Yu-cheng Yu Co-developed-by: Rick Edgecombe Signed-off-by: Rick Edgecombe Reviewed-by: Borislav Petkov (AMD) Reviewed-by: Peter Collingbourne Reviewed-by: Kees Cook Reviewed-by: Kirill A. Shutemov Acked-by: Mike Rapoport (IBM) Tested-by: Pengfei Xu Tested-by: John Allen Tested-by: Kees Cook Acked-by: David Hildenbrand Reviewed-by: Mark Brown Tested-by: Mark Brown --- fs/aio.c | 2 +- include/linux/mm.h | 3 ++- ipc/shm.c | 2 +- mm/mmap.c | 10 +++++----- mm/nommu.c | 4 ++-- mm/util.c | 2 +- 6 files changed, 12 insertions(+), 11 deletions(-) diff --git a/fs/aio.c b/fs/aio.c index b0b17bd098bb..4a7576989719 100644 --- a/fs/aio.c +++ b/fs/aio.c @@ -558,7 +558,7 @@ static int aio_setup_ring(struct kioctx *ctx, unsigned int nr_events) ctx->mmap_base = do_mmap(ctx->aio_ring_file, 0, ctx->mmap_size, PROT_READ | PROT_WRITE, - MAP_SHARED, 0, &unused, NULL); + MAP_SHARED, 0, 0, &unused, NULL); mmap_write_unlock(mm); if (IS_ERR((void *)ctx->mmap_base)) { ctx->mmap_size = 0; diff --git a/include/linux/mm.h b/include/linux/mm.h index 43701bf223d3..9ec20cbb20c1 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -3133,7 +3133,8 @@ extern unsigned long mmap_region(struct file *file, unsigned long addr, struct list_head *uf); extern unsigned long do_mmap(struct file *file, unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, - unsigned long pgoff, unsigned long *populate, struct list_head *uf); + vm_flags_t vm_flags, unsigned long pgoff, unsigned long *populate, + struct list_head *uf); extern int do_vmi_munmap(struct vma_iterator *vmi, struct mm_struct *mm, unsigned long start, size_t len, struct list_head *uf, bool downgrade); diff --git a/ipc/shm.c b/ipc/shm.c index 60e45e7045d4..576a543b7cff 100644 --- a/ipc/shm.c +++ b/ipc/shm.c @@ -1662,7 +1662,7 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, goto invalid; } - addr = do_mmap(file, addr, size, prot, flags, 0, &populate, NULL); + addr = do_mmap(file, addr, size, prot, flags, 0, 0, &populate, NULL); *raddr = addr; err = 0; if (IS_ERR_VALUE(addr)) diff --git a/mm/mmap.c b/mm/mmap.c index 13678edaa22c..afdf5f78432b 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -1221,11 +1221,11 @@ static inline bool file_mmap_ok(struct file *file, struct inode *inode, */ unsigned long do_mmap(struct file *file, unsigned long addr, unsigned long len, unsigned long prot, - unsigned long flags, unsigned long pgoff, - unsigned long *populate, struct list_head *uf) + unsigned long flags, vm_flags_t vm_flags, + unsigned long pgoff, unsigned long *populate, + struct list_head *uf) { struct mm_struct *mm = current->mm; - vm_flags_t vm_flags; int pkey = 0; validate_mm(mm); @@ -1286,7 +1286,7 @@ unsigned long do_mmap(struct file *file, unsigned long addr, * 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(flags) | mm->def_flags | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC; if (flags & MAP_LOCKED) @@ -2903,7 +2903,7 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size, file = get_file(vma->vm_file); ret = do_mmap(vma->vm_file, start, size, - prot, flags, pgoff, &populate, NULL); + prot, flags, 0, pgoff, &populate, NULL); fput(file); out: mmap_write_unlock(mm); diff --git a/mm/nommu.c b/mm/nommu.c index f670d9979a26..138826c4a872 100644 --- a/mm/nommu.c +++ b/mm/nommu.c @@ -1002,6 +1002,7 @@ unsigned long do_mmap(struct file *file, unsigned long len, unsigned long prot, unsigned long flags, + vm_flags_t vm_flags, unsigned long pgoff, unsigned long *populate, struct list_head *uf) @@ -1009,7 +1010,6 @@ unsigned long do_mmap(struct file *file, struct vm_area_struct *vma; struct vm_region *region; struct rb_node *rb; - vm_flags_t vm_flags; unsigned long capabilities, result; int ret; VMA_ITERATOR(vmi, current->mm, 0); @@ -1029,7 +1029,7 @@ unsigned long do_mmap(struct file *file, /* we've determined that we can make the mapping, now translate what we * now know into VMA flags */ - vm_flags = determine_vm_flags(file, prot, flags, capabilities); + vm_flags |= determine_vm_flags(file, prot, flags, capabilities); /* we're going to need to record the mapping */ diff --git a/mm/util.c b/mm/util.c index dd12b9531ac4..8e7fc6cacab4 100644 --- a/mm/util.c +++ b/mm/util.c @@ -540,7 +540,7 @@ unsigned long vm_mmap_pgoff(struct file *file, unsigned long addr, if (!ret) { if (mmap_write_lock_killable(mm)) return -EINTR; - ret = do_mmap(file, addr, len, prot, flag, pgoff, &populate, + ret = do_mmap(file, addr, len, prot, flag, 0, pgoff, &populate, &uf); mmap_write_unlock(mm); userfaultfd_unmap_complete(mm, &uf);