diff options
| author | Vlastimil Babka <vbabka@suse.cz> | 2025-06-24 15:03:48 +0200 |
|---|---|---|
| committer | Andrew Morton <akpm@linux-foundation.org> | 2025-07-13 16:38:14 -0700 |
| commit | 9992554c9ca3eb929daf8ccb02cfbcb3dbc27d4f (patch) | |
| tree | efb5fde62bc697106e83c8537b8f50bd4cc6ad9f /mm/madvise.c | |
| parent | 986738ce446ab0cb0b6ed71509b19ace69d22bf7 (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.c | 13 |
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; |
