summaryrefslogtreecommitdiff
path: root/mm/madvise.c
diff options
context:
space:
mode:
authorVlastimil Babka <vbabka@suse.cz>2025-06-24 15:03:48 +0200
committerAndrew Morton <akpm@linux-foundation.org>2025-07-13 16:38:14 -0700
commit9992554c9ca3eb929daf8ccb02cfbcb3dbc27d4f (patch)
treeefb5fde62bc697106e83c8537b8f50bd4cc6ad9f /mm/madvise.c
parent986738ce446ab0cb0b6ed71509b19ace69d22bf7 (diff)
mm, madvise: use standard madvise locking in madvise_set_anon_name()
Use madvise_lock()/madvise_unlock() in madvise_set_anon_name() in the same way as in do_madvise(). This narrows the lock scope a bit and reuses existing functionality. get_lock_mode() already picks the correct MADVISE_MMAP_WRITE_LOCK mode for __MADV_SET_ANON_VMA_NAME so we can just remove the explicit assignment. There is a user visible change in that the prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME...) might now return -EINTR. Link: https://lkml.kernel.org/r/20250624-anon_name_cleanup-v2-4-600075462a11@suse.cz Signed-off-by: Vlastimil Babka <vbabka@suse.cz> Tested-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com> Acked-by: David Hildenbrand <david@redhat.com> Reviewed-by: Suren Baghdasaryan <surenb@google.com> Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com> Cc: Colin Cross <ccross@google.com> Cc: Jann Horn <jannh@google.com> Cc: Liam Howlett <liam.howlett@oracle.com> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Rapoport <rppt@kernel.org> Cc: SeongJae Park <sj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'mm/madvise.c')
-rw-r--r--mm/madvise.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/mm/madvise.c b/mm/madvise.c
index cb7d74d56deb..a34c2c89a53b 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
@@ -2082,10 +2082,10 @@ static int madvise_set_anon_name(struct mm_struct *mm, unsigned long start,
{
unsigned long end;
unsigned long len;
+ int error;
struct madvise_behavior madv_behavior = {
.mm = mm,
.behavior = __MADV_SET_ANON_VMA_NAME,
- .lock_mode = MADVISE_MMAP_WRITE_LOCK,
.anon_name = anon_name,
};
@@ -2106,7 +2106,14 @@ static int madvise_set_anon_name(struct mm_struct *mm, unsigned long start,
madv_behavior.range.start = start;
madv_behavior.range.end = end;
- return madvise_walk_vmas(&madv_behavior);
+
+ error = madvise_lock(&madv_behavior);
+ if (error)
+ return error;
+ error = madvise_walk_vmas(&madv_behavior);
+ madvise_unlock(&madv_behavior);
+
+ return error;
}
int set_anon_vma_name(unsigned long addr, unsigned long size,
@@ -2136,9 +2143,7 @@ int set_anon_vma_name(unsigned long addr, unsigned long size,
return -ENOMEM;
}
- mmap_write_lock(mm);
error = madvise_set_anon_name(mm, addr, size, anon_name);
- mmap_write_unlock(mm);
anon_vma_name_put(anon_name);
return error;