From: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
To: "Liam R. Howlett" <Liam.Howlett@oracle.com>
Cc: linux-mm@kvack.org, Andrew Morton <akpm@linux-foundation.org>,
Suren Baghdasaryan <surenb@google.com>,
Vlastimil Babka <vbabka@suse.cz>,
Lorenzo Stoakes <lstoakes@gmail.com>,
Matthew Wilcox <willy@infradead.org>,
sidhartha.kumar@oracle.com,
"Paul E . McKenney" <paulmck@kernel.org>,
Bert Karwatzki <spasswolf@web.de>, Jiri Olsa <olsajiri@gmail.com>,
linux-kernel@vger.kernel.org, Kees Cook <kees@kernel.org>,
Jeff Xu <jeffxu@chromium.org>,
LEROY Christophe <christophe.leroy2@cs-soprasteria.com>,
linuxppc-dev@lists.ozlabs.org,
Dave Hansen <dave.hansen@intel.com>
Subject: Re: [PATCH v5 17/21] mm/mmap: Relocate arch_unmap() to vms_complete_munmap_vmas()
Date: Mon, 22 Jul 2024 15:25:25 +0100 [thread overview]
Message-ID: <1c3d5079-8568-4bb7-b2ad-05c5ec03fac3@lucifer.local> (raw)
In-Reply-To: <20240717200709.1552558-18-Liam.Howlett@oracle.com>
On Wed, Jul 17, 2024 at 04:07:05PM GMT, Liam R. Howlett wrote:
> From: "Liam R. Howlett" <Liam.Howlett@Oracle.com>
>
> The arch_unmap call was previously moved above the rbtree modifications
> in commit 5a28fc94c914 ("x86/mpx, mm/core: Fix recursive munmap()
> corruption"). The move was motivated by an issue with calling
> arch_unmap() after the rbtree was modified.
>
> Since the above commit, mpx was dropped from the kernel in 45fc24e89b7c
> ("x86/mpx: remove MPX from arch/x86"), so the motivation for calling
> arch_unmap() prior to modifying the vma tree no longer exists
> (regardless of rbtree or maple tree implementations).
>
> Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
> Cc: LEROY Christophe <christophe.leroy2@cs-soprasteria.com>
> Cc: linuxppc-dev@lists.ozlabs.org
> Cc: Dave Hansen <dave.hansen@intel.com>
> ---
> mm/mmap.c | 12 ++----------
> 1 file changed, 2 insertions(+), 10 deletions(-)
>
> diff --git a/mm/mmap.c b/mm/mmap.c
> index 9f870e715a47..117e8240f697 100644
> --- a/mm/mmap.c
> +++ b/mm/mmap.c
> @@ -2680,6 +2680,7 @@ static void vms_complete_munmap_vmas(struct vma_munmap_struct *vms,
> mm = vms->mm;
> mm->map_count -= vms->vma_count;
> mm->locked_vm -= vms->locked_vm;
> + arch_unmap(mm, vms->start, vms->end); /* write lock needed */
Worth having a mmap_assert_write_locked() here? Would make this
self-documenting also.
> if (vms->unlock)
> mmap_write_downgrade(mm);
>
> @@ -2907,7 +2908,7 @@ do_vmi_align_munmap(struct vma_iterator *vmi, struct vm_area_struct *vma,
> *
> * This function takes a @mas that is either pointing to the previous VMA or set
> * to MA_START and sets it up to remove the mapping(s). The @len will be
> - * aligned and any arch_unmap work will be preformed.
> + * aligned prior to munmap.
> *
> * Return: 0 on success and drops the lock if so directed, error and leaves the
> * lock held otherwise.
> @@ -2927,16 +2928,12 @@ int do_vmi_munmap(struct vma_iterator *vmi, struct mm_struct *mm,
> return -EINVAL;
>
> /*
> - * Check if memory is sealed before arch_unmap.
> * Prevent unmapping a sealed VMA.
> * can_modify_mm assumes we have acquired the lock on MM.
> */
> if (unlikely(!can_modify_mm(mm, start, end)))
> return -EPERM;
>
> - /* arch_unmap() might do unmaps itself. */
> - arch_unmap(mm, start, end);
> -
> /* Find the first overlapping VMA */
> vma = vma_find(vmi, end);
> if (!vma) {
> @@ -2997,9 +2994,6 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
> if (unlikely(!can_modify_mm(mm, addr, end)))
> return -EPERM;
>
> - /* arch_unmap() might do unmaps itself. */
> - arch_unmap(mm, addr, end);
> -
It seems to me that the intent of this particular invocation was to ensure
we have done what we can to unmap before trying to unmap ourselves.
However this seems stupid to me anyway - 'hey maybe the arch will do this
for us' - yeah probably not.
So this should definitely go regardless, given we will invoke it later now
anyway.
> /* Find the first overlapping VMA */
> vma = vma_find(&vmi, end);
> init_vma_munmap(&vms, &vmi, vma, addr, end, uf, /* unlock = */ false);
> @@ -3377,14 +3371,12 @@ int do_vma_munmap(struct vma_iterator *vmi, struct vm_area_struct *vma,
> struct mm_struct *mm = vma->vm_mm;
>
> /*
> - * Check if memory is sealed before arch_unmap.
> * Prevent unmapping a sealed VMA.
> * can_modify_mm assumes we have acquired the lock on MM.
> */
> if (unlikely(!can_modify_mm(mm, start, end)))
> return -EPERM;
>
> - arch_unmap(mm, start, end);
> return do_vmi_align_munmap(vmi, vma, mm, start, end, uf, unlock);
> }
>
> --
> 2.43.0
>
I hope we can find a way to eliminate these kind of hooks altogether as
they reduce our control over how VMA operations are performed.
LGTM,
Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
next prev parent reply other threads:[~2024-07-22 14:25 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-17 20:06 [PATCH v5 00/21] Avoid MAP_FIXED gap exposure Liam R. Howlett
2024-07-17 20:06 ` [PATCH v5 01/21] mm/mmap: Correctly position vma_iterator in __split_vma() Liam R. Howlett
2024-07-17 20:06 ` [PATCH v5 02/21] mm/mmap: Introduce abort_munmap_vmas() Liam R. Howlett
2024-07-17 20:06 ` [PATCH v5 03/21] mm/mmap: Introduce vmi_complete_munmap_vmas() Liam R. Howlett
2024-07-17 20:06 ` [PATCH v5 04/21] mm/mmap: Extract the gathering of vmas from do_vmi_align_munmap() Liam R. Howlett
2024-07-17 20:06 ` [PATCH v5 05/21] mm/mmap: Introduce vma_munmap_struct for use in munmap operations Liam R. Howlett
2024-07-17 20:06 ` [PATCH v5 06/21] mm/mmap: Change munmap to use vma_munmap_struct() for accounting and surrounding vmas Liam R. Howlett
2024-07-17 20:06 ` [PATCH v5 07/21] mm/mmap: Extract validate_mm() from vma_complete() Liam R. Howlett
2024-07-17 20:06 ` [PATCH v5 08/21] mm/mmap: Inline munmap operation in mmap_region() Liam R. Howlett
2024-07-17 20:06 ` [PATCH v5 09/21] mm/mmap: Expand mmap_region() munmap call Liam R. Howlett
2024-07-17 20:06 ` [PATCH v5 10/21] mm/mmap: Support vma == NULL in init_vma_munmap() Liam R. Howlett
2024-07-22 13:14 ` Lorenzo Stoakes
2024-07-17 20:06 ` [PATCH v5 11/21] mm/mmap: Reposition vma iterator in mmap_region() Liam R. Howlett
2024-07-17 20:07 ` [PATCH v5 12/21] mm/mmap: Track start and end of munmap in vma_munmap_struct Liam R. Howlett
2024-07-17 20:07 ` [PATCH v5 13/21] mm/mmap: Clean up unmap_region() argument list Liam R. Howlett
2024-07-17 20:07 ` [PATCH v5 14/21] mm/mmap: Avoid zeroing vma tree in mmap_region() Liam R. Howlett
2024-07-22 18:42 ` Lorenzo Stoakes
2024-07-23 14:15 ` Liam R. Howlett
2024-07-17 20:07 ` [PATCH v5 15/21] mm/mmap: Use PHYS_PFN " Liam R. Howlett
2024-07-17 20:07 ` [PATCH v5 16/21] mm/mmap: Use vms accounted pages " Liam R. Howlett
2024-07-24 20:23 ` Paul Moore
2024-07-17 20:07 ` [PATCH v5 17/21] mm/mmap: Relocate arch_unmap() to vms_complete_munmap_vmas() Liam R. Howlett
2024-07-22 14:25 ` Lorenzo Stoakes [this message]
2024-07-23 14:11 ` Liam R. Howlett
2024-07-17 20:07 ` [PATCH v5 18/21] mm/mmap: Move can_modify_mm() check down the stack Liam R. Howlett
2024-07-22 14:41 ` Lorenzo Stoakes
2024-07-24 16:29 ` Jeff Xu
2024-07-17 20:07 ` [PATCH v5 19/21] ipc/shm, mm: Drop do_vma_munmap() Liam R. Howlett
2024-07-22 14:58 ` Lorenzo Stoakes
2024-07-17 20:07 ` [PATCH v5 20/21] mm/mmap: Move may_expand_vm() check in mmap_region() Liam R. Howlett
2024-07-17 20:07 ` [PATCH v5 21/21] mm/mmap: Drop incorrect comment from vms_gather_munmap_vmas() Liam R. Howlett
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1c3d5079-8568-4bb7-b2ad-05c5ec03fac3@lucifer.local \
--to=lorenzo.stoakes@oracle.com \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=christophe.leroy2@cs-soprasteria.com \
--cc=dave.hansen@intel.com \
--cc=jeffxu@chromium.org \
--cc=kees@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=lstoakes@gmail.com \
--cc=olsajiri@gmail.com \
--cc=paulmck@kernel.org \
--cc=sidhartha.kumar@oracle.com \
--cc=spasswolf@web.de \
--cc=surenb@google.com \
--cc=vbabka@suse.cz \
--cc=willy@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox