From mboxrd@z Thu Jan 1 00:00:00 1970 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 97B92C77B7C for ; Mon, 23 Jun 2025 16:48:04 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 371306B00C8; Mon, 23 Jun 2025 12:48:04 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3210D6B00C9; Mon, 23 Jun 2025 12:48:04 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 210776B00CA; Mon, 23 Jun 2025 12:48:04 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 0E7C36B00C8 for ; Mon, 23 Jun 2025 12:48:04 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 762F91D7DAF for ; Mon, 23 Jun 2025 16:48:03 +0000 (UTC) X-FDA: 83587247646.26.1F8854C Received: from mail-qt1-f175.google.com (mail-qt1-f175.google.com [209.85.160.175]) by imf19.hostedemail.com (Postfix) with ESMTP id 855041A000D for ; Mon, 23 Jun 2025 16:48:01 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=bmFtrqiK; spf=pass (imf19.hostedemail.com: domain of surenb@google.com designates 209.85.160.175 as permitted sender) smtp.mailfrom=surenb@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750697281; 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-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=R5sEhvD1o8Bo/zBsuxrAo9Wuzcni0KuqnAqzHNeBsA0=; b=KYZC7lPFV/+sHvgpxJIOLdtCuwiWxlY1kfjy93JCHLe9DJUNCr3cmg29TkRfjz7ZCFjN2F Pbo4S6UMl17APuk0I1ST9dYdFMryXnGZRbY9ktqIFjFYbbEeakpK8w7h3UpaR0rXiOmInQ W3uZCWFeWJfgZs33sM4nmNb7RN8NPiI= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=bmFtrqiK; spf=pass (imf19.hostedemail.com: domain of surenb@google.com designates 209.85.160.175 as permitted sender) smtp.mailfrom=surenb@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750697281; a=rsa-sha256; cv=none; b=uf5kGE1umBVS8UpPL1/WqubdhQO2NOIqbILQE7Itzvc83uQShIgnjy7uidLPLtvZ/4coGP h5FX3T4QOakB6p/YCtC2H6xxDWoje5A3cIAgalSFEd0D/pAxAExUkAvSbEv74IdwGKEA+o YbLBSmjwNucP3t8OyV6VfNtbmPTC1CA= Received: by mail-qt1-f175.google.com with SMTP id d75a77b69052e-4a58197794eso3631cf.1 for ; Mon, 23 Jun 2025 09:48:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1750697280; x=1751302080; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=R5sEhvD1o8Bo/zBsuxrAo9Wuzcni0KuqnAqzHNeBsA0=; b=bmFtrqiKhVMJs8zEGNn+M1ItjsXh1JslGm6fwszULb3PnJwqLlzz39ckXNRHdUvgO2 e2trA4hIqPiEDIFCQSn8uVhcAqSxc3KpwENo4Nm2xsR97aUgStQiwouxPBwW0+VfqwN/ n4pcuOhHojEwuycTTeCDftWUxe9bj7vlTDSgcEkXaoctd68a0YfkENleMkjh+FpuPwaK Qku70Tfhv8wduThAQNPmxxbXIsESJBnHwsuZiJHLzUZdhgYEKfGfsYrh8rnSi2pcmvS4 gd8b3V9HiUb9JFUGOdbReJsiybefcpsEsk8BEFWyXGLRoMlncMClsr7eWCQv/ZU1JOlP 8OHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750697280; x=1751302080; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=R5sEhvD1o8Bo/zBsuxrAo9Wuzcni0KuqnAqzHNeBsA0=; b=QJNuQv/xfIPBHwvaKO9E0pL7SKT0dA6JZpCwCtA+TzlvWEjH0L4A33Lkxi9YA6PmVL TRoLQ0zTmRR3M99N0zuueIBVcsUb1qoJwD7kXWnhJGmKCXnT8XD1FFsIRNJWx8oaBFsQ L9bBC6cMXtrTw/rU5jwc0b9z4F6hO/GkiUTz9Olr48ZVCjZ7ZKRY2Zb1O2Luo3ypO/3t iFC0G5GR1EnoVxBlh+WZYaZxElpUOK9k8TQ20STM+T0PMDLrqWzCPawPwGACHlOHuAps SnaIQRLniGlBg4g4tLRM4KjHan2Z4HwFtEj9ldfxDyRgy3iMnsoR9lBtaQscByWGpaz5 AlCw== X-Forwarded-Encrypted: i=1; AJvYcCVFgDvlBhKx9mkrmP45gCg6RK+6x9zRKV5eh9i70eNb0AmWCEW0Y4k3T8gEtysoKe6Fgzxt3D8KUA==@kvack.org X-Gm-Message-State: AOJu0YwZMYKc8TKQTdkgH3jl54SmojeIikRF/vAyKSebeFboFePhkCxd n2IM7JyvI4bk5b0RKamoXGWQtbgFKoc9R2RV233GVPqK619AfrPUIPTVIcSQkKRyon0S+m96mB7 zaZSh/4KrdDs2VKKyl8Y9iARV42H5s6hb17mPyQ8C X-Gm-Gg: ASbGncvC97oiE8BSgZdQWWtIFrayLNpi5QZmNV+c0kJeNg3kCB19JxvPtcvG8sefqIh 088rNvqoMjmhuzWF09NJ0yc/j3YkVP2lzXsZ9CtAKzUKdyFxwasYP2+bEaskbFV8yNNMkeZAKdY H///L+pu6rwaevt99rzyt0rXBdKEgTvh46tHacCSH+fw== X-Google-Smtp-Source: AGHT+IErU8MyPzxoQBKh0E9tOFlZmJJTClUvJPjmcT2f641+BQlv2u0wG4prN29Z87lZ1kXBPh8/2C/2BPk/uVpNP7E= X-Received: by 2002:ac8:7c43:0:b0:4a4:fdf2:375c with SMTP id d75a77b69052e-4a786d6571bmr8284131cf.9.1750697280105; Mon, 23 Jun 2025 09:48:00 -0700 (PDT) MIME-Version: 1.0 References: <20250623-anon_name_cleanup-v1-0-04c94384046f@suse.cz> <20250623-anon_name_cleanup-v1-2-04c94384046f@suse.cz> In-Reply-To: <20250623-anon_name_cleanup-v1-2-04c94384046f@suse.cz> From: Suren Baghdasaryan Date: Mon, 23 Jun 2025 09:47:49 -0700 X-Gm-Features: Ac12FXxpII-wpM0zzRsKLrIeZ-308_02VCxAihZcNIoMLOaUT8VN7THZMvcpndc Message-ID: Subject: Re: [PATCH RFC 2/2] mm, madvise: move prctl_set_vma() to mm/madvise.c To: Vlastimil Babka Cc: Andrew Morton , "Liam R. Howlett" , Lorenzo Stoakes , David Hildenbrand , Jann Horn , Mike Rapoport , Michal Hocko , Colin Cross , linux-mm@kvack.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 855041A000D X-Rspam-User: X-Rspamd-Server: rspam07 X-Stat-Signature: qzfddcjcxur65a883hykzyeo7a8tqsrm X-HE-Tag: 1750697281-282303 X-HE-Meta: U2FsdGVkX1+EuNpnQdbluH4UdZJcD52r6KUf/13QAYgoilXwimH5FSF2G1wn9jbVKXFkdCqgMQMMEeJqdcoxgw3fzyOM1Kp22VUOjkpggVNo3O7YBOElqub4oqmrAbuI9JdbkTsOIYhTuIGqw9HgA7T8KzgzFib76fP2Jvaljepn/UalO7BknL9K/8Mtbf+G0VfIVDPtbayOf21hmAIGxGE17qtwY8GkxTWXm9I+t3p9ZbZ0VnBMn7x1mwuzaEASnKh8qEuETUXXwGAU8u17CqUZ8NMIeT0LIsfFZfmlSbFMaXu51n1zVn3qd2AOa5r3xWVSrc7boOAQGE3d2B8FiZlDIi6Y3LPkRM479CBotSfztiBpa8CGvWPC8m6NrisxaSSk2p/m5mThjoi68tV8SEshvh/grwaprcHcF2VBV2uqUcktq/hiotGzWSEc1layvRx+8rL/Xnn1C4twoJ2LwdSpq/DdWOh/zl6XEGaxXfT4XcljoOkhGHQaJkbLQtOqeRU8VxqPRe+elZloIzzD+dzLRkFkw3yC1K9wwt2Yb3McfoTnv1UL3Yfgvgd9IZgYWHqd9FrEMXYC2X4Hpa0T2/EB30Ip4Epz/b9k7KdccShzPXcNvZ5EKAsewyK5zYrswa2Dk4c0QlNXZ69VdT/QApwgtIyq8kgmaqLnV1cDkeLgqMIaMR2MMxUkNC8bEMPdWVIT0jwo5NS3TcYREuM4e2bwsdtMGSQXkQ9+CBKqRYb0h0HInU5bijbyf8SwBmvrue0//99jABhRBe/aXUWmJiKXQNSNqeSXS3ky9PwsJ6BYgWBHsCzoRkQsrGnhNDKFC+pqOYIprF6lN3qssYwneebtRTmm3sb8fOHUwaJamw9GCtCQZGlP97bfT8PBKf27Nla6gMxazuNEfgpa7NUheqNhhzOwlkDo81mgpNV0gYb0BnerMbOSExtVgRNBcnp/OVCo97wkFBUw1KkwSNu ruUfb2s7 wbvRFyi7DMOQe992mLlyKyraCxgqa+7L0CZAYVZZZWh5cNXlIWEHlFpAtFgqQ1AReuz1wo43GsfwMStfw4+m3Gd1RviDdUeWOtM7gXeaexhhdAgxYKlgt9TntvK+78s7MzCOQ4KvqEX90DHNTpNn9t7ja56aWLM++tWm53Zgt60WYV3OZQyYcXcz/nTEJBdafTZQ5oZQ7zW/MSWBqn40OYSt1O675Zo0j1rn8pjWVbqEw434= 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: List-Subscribe: List-Unsubscribe: On Mon, Jun 23, 2025 at 8:00=E2=80=AFAM Vlastimil Babka wr= ote: > > Setting anon_name is done via madvise_set_anon_name() and behaves a lot > of like other madvise operations. However, apparently because madvise() > has lacked the 4th argument and prctl() not, the userspace entry point > has been implemented via prctl(PR_SET_VMA, ...) and handled first by > prctl_set_vma(). > > Currently prctl_set_vma() lives in kernel/sys.c but it's mm code so move > it under mm. mm/madvise.c seems to be the most straightforward place as > that's where madvise_set_anon_name() lives, so we can stop declaring the > latter in the header and instead declare prctl_set_vma(). It's not ideal > as prctl is not madvise, but that's the reality we live in, as described > above. > > Signed-off-by: Vlastimil Babka > --- > include/linux/mm.h | 13 +++++------ > kernel/sys.c | 64 ------------------------------------------------= ------ > mm/madvise.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++-= - > 3 files changed, 63 insertions(+), 73 deletions(-) > > diff --git a/include/linux/mm.h b/include/linux/mm.h > index 0e0549f3d681f6c7a78e8dfa341a810e5a8f96c1..1f8c2561c8cf77e9bb6950943= 25401c09c15f3e6 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -4059,14 +4059,13 @@ unsigned long wp_shared_mapping_range(struct addr= ess_space *mapping, > #endif > > #ifdef CONFIG_ANON_VMA_NAME > -int madvise_set_anon_name(struct mm_struct *mm, unsigned long start, > - unsigned long len_in, > - struct anon_vma_name *anon_name); > +int prctl_set_vma(unsigned long opt, unsigned long start, > + unsigned long size, unsigned long arg); > #else > -static inline int > -madvise_set_anon_name(struct mm_struct *mm, unsigned long start, > - unsigned long len_in, struct anon_vma_name *anon_na= me) { > - return 0; > +static inline int prctl_set_vma(unsigned long opt, unsigned long start, > + unsigned long size, unsigned long arg) > +{ > + return -EINVAL; > } > #endif > > diff --git a/kernel/sys.c b/kernel/sys.c > index adc0de0aa364aebb23999f621717a5d32599921c..247d8925daa6fc86134504042= 832c2164b5d8277 100644 > --- a/kernel/sys.c > +++ b/kernel/sys.c > @@ -2343,70 +2343,6 @@ int __weak arch_lock_shadow_stack_status(struct ta= sk_struct *t, unsigned long st > > #define PR_IO_FLUSHER (PF_MEMALLOC_NOIO | PF_LOCAL_THROTTLE) > > -#ifdef CONFIG_ANON_VMA_NAME > - > -#define ANON_VMA_NAME_MAX_LEN 80 > -#define ANON_VMA_NAME_INVALID_CHARS "\\`$[]" > - > -static inline bool is_valid_name_char(char ch) > -{ > - /* printable ascii characters, excluding ANON_VMA_NAME_INVALID_CH= ARS */ > - return ch > 0x1f && ch < 0x7f && > - !strchr(ANON_VMA_NAME_INVALID_CHARS, ch); > -} > - > -static int prctl_set_vma(unsigned long opt, unsigned long addr, > - unsigned long size, unsigned long arg) > -{ > - struct mm_struct *mm =3D current->mm; > - const char __user *uname; > - struct anon_vma_name *anon_name =3D NULL; > - int error; > - > - switch (opt) { > - case PR_SET_VMA_ANON_NAME: > - uname =3D (const char __user *)arg; My issue with this refactoring is that prctl_set_vma() might grow some other opt which does not belong in madvise.c. Moving it into vma.c seems a bit more appropriate IMHO. > - if (uname) { > - char *name, *pch; > - > - name =3D strndup_user(uname, ANON_VMA_NAME_MAX_LE= N); > - if (IS_ERR(name)) > - return PTR_ERR(name); > - > - for (pch =3D name; *pch !=3D '\0'; pch++) { > - if (!is_valid_name_char(*pch)) { > - kfree(name); > - return -EINVAL; > - } > - } > - /* anon_vma has its own copy */ > - anon_name =3D anon_vma_name_alloc(name); > - kfree(name); > - if (!anon_name) > - return -ENOMEM; > - > - } > - > - mmap_write_lock(mm); > - error =3D madvise_set_anon_name(mm, addr, size, anon_name= ); > - mmap_write_unlock(mm); > - anon_vma_name_put(anon_name); > - break; > - default: > - error =3D -EINVAL; > - } > - > - return error; > -} > - > -#else /* CONFIG_ANON_VMA_NAME */ > -static int prctl_set_vma(unsigned long opt, unsigned long start, > - unsigned long size, unsigned long arg) > -{ > - return -EINVAL; > -} > -#endif /* CONFIG_ANON_VMA_NAME */ > - > static inline unsigned long get_current_mdwe(void) > { > unsigned long ret =3D 0; > diff --git a/mm/madvise.c b/mm/madvise.c > index ae29395b4fc7f65a449c5772b1901a90f4195885..4a8e61e2c5025726bc2ce1f32= 3768c5b25cef2c9 100644 > --- a/mm/madvise.c > +++ b/mm/madvise.c > @@ -31,6 +31,7 @@ > #include > #include > #include > +#include > > #include > > @@ -134,8 +135,8 @@ static int replace_anon_vma_name(struct vm_area_struc= t *vma, > return 0; > } > > -int madvise_set_anon_name(struct mm_struct *mm, unsigned long start, > - unsigned long len_in, struct anon_vma_name *ano= n_name) > +static int madvise_set_anon_name(struct mm_struct *mm, unsigned long sta= rt, > + unsigned long len_in, struct anon_vma_name *anon_name) > { > unsigned long end; > unsigned long len; > @@ -165,6 +166,60 @@ int madvise_set_anon_name(struct mm_struct *mm, unsi= gned long start, > madv_behavior.range.end =3D end; > return madvise_walk_vmas(&madv_behavior); > } > + > +#define ANON_VMA_NAME_MAX_LEN 80 > +#define ANON_VMA_NAME_INVALID_CHARS "\\`$[]" > + > +static inline bool is_valid_name_char(char ch) > +{ > + /* printable ascii characters, excluding ANON_VMA_NAME_INVALID_CH= ARS */ > + return ch > 0x1f && ch < 0x7f && > + !strchr(ANON_VMA_NAME_INVALID_CHARS, ch); > +} > + > +int prctl_set_vma(unsigned long opt, unsigned long addr, > + unsigned long size, unsigned long arg) > +{ > + struct mm_struct *mm =3D current->mm; > + const char __user *uname; > + struct anon_vma_name *anon_name =3D NULL; > + int error; > + > + switch (opt) { > + case PR_SET_VMA_ANON_NAME: > + uname =3D (const char __user *)arg; > + if (uname) { > + char *name, *pch; > + > + name =3D strndup_user(uname, ANON_VMA_NAME_MAX_LE= N); > + if (IS_ERR(name)) > + return PTR_ERR(name); > + > + for (pch =3D name; *pch !=3D '\0'; pch++) { > + if (!is_valid_name_char(*pch)) { > + kfree(name); > + return -EINVAL; > + } > + } > + /* anon_vma has its own copy */ > + anon_name =3D anon_vma_name_alloc(name); > + kfree(name); > + if (!anon_name) > + return -ENOMEM; > + > + } > + > + mmap_write_lock(mm); > + error =3D madvise_set_anon_name(mm, addr, size, anon_name= ); > + mmap_write_unlock(mm); > + anon_vma_name_put(anon_name); > + break; > + default: > + error =3D -EINVAL; > + } > + > + return error; > +} > #else /* CONFIG_ANON_VMA_NAME */ > static int replace_anon_vma_name(struct vm_area_struct *vma, > struct anon_vma_name *anon_name) > > -- > 2.50.0 >