linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] mm: mmap lock holding assertion on remap_pfn_range
@ 2022-09-19 15:47 Dawei Li
  2022-09-19 20:57 ` Andrew Morton
  0 siblings, 1 reply; 2+ messages in thread
From: Dawei Li @ 2022-09-19 15:47 UTC (permalink / raw)
  To: akpm, hch; +Cc: linux-mm, linux-kernel, Dawei Li

remap_pfn_range() creates/modifies the mapping between user virtual
address and physical address, the caller of which must hold mmap
writer lock to achieve access consistency of mapping.

The callers fall into categories below:
1) fops->mmap() implemented by driver
For this case, mmap_lock has been taken externally, the rule holds true.

2) Some arch codes do mapping on their own(vdso e.g.), rather than via
fops->mmap().

3) Some driver codes do mapping into user address space, for some
reasons, the mapping is not implemented by fops->mmap().

For the last two cases, an explicit assertion must be made.

Signed-off-by: Dawei Li <set_pte_at@outlook.com>
---
 mm/memory.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/mm/memory.c b/mm/memory.c
index 118e5f023597..fd0ec1250974 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -2551,6 +2551,11 @@ int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,
 {
 	int err;
 
+	if (!vma->vm_mm)
+		return -EINVAL;
+
+	mmap_assert_write_locked(vma->vm_mm);
+
 	err = track_pfn_remap(vma, &prot, pfn, addr, PAGE_ALIGN(size));
 	if (err)
 		return -EINVAL;
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] mm: mmap lock holding assertion on remap_pfn_range
  2022-09-19 15:47 [PATCH] mm: mmap lock holding assertion on remap_pfn_range Dawei Li
@ 2022-09-19 20:57 ` Andrew Morton
  0 siblings, 0 replies; 2+ messages in thread
From: Andrew Morton @ 2022-09-19 20:57 UTC (permalink / raw)
  To: Dawei Li; +Cc: hch, linux-mm, linux-kernel

On Mon, 19 Sep 2022 23:47:32 +0800 Dawei Li <set_pte_at@outlook.com> wrote:

> remap_pfn_range() creates/modifies the mapping between user virtual
> address and physical address, the caller of which must hold mmap
> writer lock to achieve access consistency of mapping.
> 
> The callers fall into categories below:
> 1) fops->mmap() implemented by driver
> For this case, mmap_lock has been taken externally, the rule holds true.
> 
> 2) Some arch codes do mapping on their own(vdso e.g.), rather than via
> fops->mmap().
> 
> 3) Some driver codes do mapping into user address space, for some
> reasons, the mapping is not implemented by fops->mmap().
> 
> For the last two cases, an explicit assertion must be made.

Why "must" it be made?  Are callers known to get this wrong?

> --- a/mm/memory.c
> +++ b/mm/memory.c
> @@ -2551,6 +2551,11 @@ int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,
>  {
>  	int err;
>  
> +	if (!vma->vm_mm)
> +		return -EINVAL;

Can this happen?  If so, under what circumstances?

> +	mmap_assert_write_locked(vma->vm_mm);
> +
>  	err = track_pfn_remap(vma, &prot, pfn, addr, PAGE_ALIGN(size));
>  	if (err)
>  		return -EINVAL;
> -- 
> 2.25.1


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-09-19 20:57 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-19 15:47 [PATCH] mm: mmap lock holding assertion on remap_pfn_range Dawei Li
2022-09-19 20:57 ` Andrew Morton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).