From: "Lorenzo Stoakes (ARM)" <ljs@kernel.org>
To: Jann Horn <jannh@google.com>
Cc: "Paul Moore" <paul@paul-moore.com>,
"James Morris" <jmorris@namei.org>,
"Serge E. Hallyn" <serge@hallyn.com>,
"Stephen Smalley" <stephen.smalley.work@gmail.com>,
"Jeff Xu" <jeffxu@google.com>,
"Thiébaud Weksteen" <tweek@google.com>,
"Alexander Viro" <viro@zeniv.linux.org.uk>,
"Christian Brauner" <brauner@kernel.org>,
"Jan Kara" <jack@suse.cz>,
linux-fsdevel@vger.kernel.org,
linux-security-module@vger.kernel.org,
"Ondrej Mosnacek" <omosnace@redhat.com>,
selinux@vger.kernel.org,
"Andrew Morton" <akpm@linux-foundation.org>,
"Liam R. Howlett" <liam@infradead.org>,
"Vlastimil Babka" <vbabka@kernel.org>,
"Pedro Falcato" <pfalcato@suse.de>,
"David Hildenbrand" <david@kernel.org>,
linux-mm@kvack.org
Subject: Re: [PATCH 1/3] proc: refactor /proc/$pid/mem to use struct as private_data
Date: Fri, 21 Aug 2026 19:34:41 +0100 [thread overview]
Message-ID: <aoiXvKXQK__0cSWL@gremlin> (raw)
In-Reply-To: <20260818-selinux-pokemem-v1-1-90cd2357ee05@google.com>
On Tue, Aug 18, 2026 at 09:51:05PM +0200, Jann Horn wrote:
> Refactor the handlers for proc_mem_operations to use the new struct
> mem_private as ->private_data, rather than directly storing an mm_struct*
> in ->private_data.
>
> This is in preparation for adding more state in mem_private in the next
> commit.
>
> Signed-off-by: Jann Horn <jannh@google.com>
You had me at helper struct Jann, you had me at helper struct :)
Reviewed-by: Lorenzo Stoakes (ARM) <ljs@kernel.org>
> ---
> fs/proc/base.c | 29 ++++++++++++++++++++++++++---
> 1 file changed, 26 insertions(+), 3 deletions(-)
>
> diff --git a/fs/proc/base.c b/fs/proc/base.c
> index 780f81259052..bec6197329dc 100644
> --- a/fs/proc/base.c
> +++ b/fs/proc/base.c
> @@ -848,11 +848,24 @@ static int __mem_open(struct inode *inode, struct file *file, unsigned int mode)
> return 0;
> }
>
> +/* private_data for proc_mem_operations */
> +struct mem_private {
> + struct mm_struct *mm;
> +};
> +
> static int mem_open(struct inode *inode, struct file *file)
> {
> + struct mem_private *priv __free(kfree) = kmalloc_obj(struct mem_private);
> +
> + if (!priv)
> + return -ENOMEM;
> if (WARN_ON_ONCE(!(file->f_op->fop_flags & FOP_UNSIGNED_OFFSET)))
> return -EINVAL;
> - return __mem_open(inode, file, PTRACE_MODE_ATTACH);
> + priv->mm = proc_mem_open(inode, PTRACE_MODE_ATTACH);
> + if (IS_ERR_OR_NULL(priv->mm))
> + return priv->mm ? PTR_ERR(priv->mm) : -ESRCH;
> + file->private_data = no_free_ptr(priv);
> + return 0;
> }
>
> static bool proc_mem_foll_force(struct file *file, struct mm_struct *mm)
> @@ -880,7 +893,8 @@ static bool proc_mem_foll_force(struct file *file, struct mm_struct *mm)
> static ssize_t mem_rw(struct file *file, char __user *buf,
> size_t count, loff_t *ppos, int write)
> {
> - struct mm_struct *mm = file->private_data;
> + struct mem_private *priv = file->private_data;
> + struct mm_struct *mm = priv->mm;
> unsigned long addr = *ppos;
> ssize_t copied;
> char *page;
> @@ -970,12 +984,21 @@ static int mem_release(struct inode *inode, struct file *file)
> return 0;
> }
>
> +static int mem_release_with_private(struct inode *inode, struct file *file)
> +{
> + struct mem_private *priv = file->private_data;
> +
> + mmdrop(priv->mm);
> + kfree(priv);
> + return 0;
> +}
OK I see that we mm_grab() in proc_mem_open().
> +
> static const struct file_operations proc_mem_operations = {
> .llseek = mem_lseek,
> .read = mem_read,
> .write = mem_write,
> .open = mem_open,
> - .release = mem_release,
> + .release = mem_release_with_private,
> .fop_flags = FOP_UNSIGNED_OFFSET,
> };
>
>
> --
> 2.55.0.737.g08866a6d13-goog
>
--
Cheers, Lorenzo
next prev parent reply other threads:[~2026-08-21 18:34 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-18 19:51 [PATCH 0/3] proc,security,selinux: let SELinux block FOLL_FORCE for /proc/self/mem Jann Horn
2026-08-18 19:51 ` [PATCH 1/3] proc: refactor /proc/$pid/mem to use struct as private_data Jann Horn
2026-08-18 19:58 ` sashiko-bot
2026-08-20 11:20 ` Jan Kara
2026-08-20 17:18 ` David Hildenbrand (Arm)
2026-08-21 18:34 ` Lorenzo Stoakes (ARM) [this message]
2026-08-18 19:51 ` [PATCH 2/3] proc: query LSMs for introspective mem access (if PROC_MEM_FORCE_ALWAYS) Jann Horn
2026-08-18 20:00 ` sashiko-bot
2026-08-20 17:22 ` David Hildenbrand (Arm)
2026-08-20 18:44 ` Jann Horn
2026-08-21 14:18 ` David Hildenbrand (Arm)
2026-08-21 14:48 ` Jann Horn
2026-08-21 18:52 ` Lorenzo Stoakes (ARM)
2026-08-21 19:00 ` Lorenzo Stoakes (ARM)
2026-08-18 19:51 ` [PATCH 3/3] selinux: require EXECMEM or PTRACE for FOLL_FORCE introspection Jann Horn
2026-08-18 19:58 ` sashiko-bot
2026-08-19 14:54 ` Stephen Smalley
2026-08-20 15:23 ` Jann Horn
2026-08-21 13:52 ` Stephen Smalley
2026-08-21 15:07 ` Jann Horn
2026-08-21 18:56 ` Lorenzo Stoakes (ARM)
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=aoiXvKXQK__0cSWL@gremlin \
--to=ljs@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=brauner@kernel.org \
--cc=david@kernel.org \
--cc=jack@suse.cz \
--cc=jannh@google.com \
--cc=jeffxu@google.com \
--cc=jmorris@namei.org \
--cc=liam@infradead.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-security-module@vger.kernel.org \
--cc=omosnace@redhat.com \
--cc=paul@paul-moore.com \
--cc=pfalcato@suse.de \
--cc=selinux@vger.kernel.org \
--cc=serge@hallyn.com \
--cc=stephen.smalley.work@gmail.com \
--cc=tweek@google.com \
--cc=vbabka@kernel.org \
--cc=viro@zeniv.linux.org.uk \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.