lkml.org 
[lkml]   [2015]   [May]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH v5] procfs: Always expose /proc/<pid>/map_files/ and make it readable
From
Date
On Mon, 2015-05-18 at 20:10 -0700, Calvin Owens wrote:
> Currently, /proc/<pid>/map_files/ is restricted to CAP_SYS_ADMIN, and
> is only exposed if CONFIG_CHECKPOINT_RESTORE is set. This interface is
> very useful for enumerating the files mapped into a process when the
> more verbose information in /proc/<pid>/maps is not needed. It also
> allows access to file descriptors for files that have been deleted and
> closed but are still mmapped into a process, which can be very useful
> for introspection and debugging.

style trivia:

> diff --git a/fs/proc/base.c b/fs/proc/base.c
[]
> +/*
> + * Enforce stronger PTRACE_MODE_ATTACH permissions on the symlinks under
> + * /proc/<pid>/map_files, since these links may refer to deleted or O_TMPFILE
> + * files that users might assume are inaccessible regardless of their
> + * ownership/permissions.
> + */
> +static void *proc_map_files_follow_link(struct dentry *dentry, struct nameidata *nd)
> +{
> + struct inode *inode = d_inode(dentry);
> + struct task_struct *task;
> + int allowed = 0;
> +
> + task = get_proc_task(inode);
> + if (task) {
> + allowed = ptrace_may_access(task, PTRACE_MODE_ATTACH);
> + put_task_struct(task);
> + } else {
> + return ERR_PTR(-ESRCH);
> + }
> +
> + if (!allowed)
> + return ERR_PTR(-EACCES);
> +
> + return proc_pid_follow_link(dentry, nd);
> +}

It'd perhaps be clearer to read this with an
immediate return after a failure in get_proc_task.

Maybe something like (move initializations as desired):

static void *proc_map_files_follow_link(struct dentry *dentry, struct nameidata *nd)
{
int allowed;
struct iode *inode = d_inode(dentry);
struct task_struct task = get_proc_task(inode);

if (!task)
return ERR_PTR(-ESRCH);

allowed = ptrace_may_access(task, PTRACE_MODE_ATTACH);

put_task_struct(task);

if (!allowed)
return ERR_PTR(-EACCES);

return proc_pic_follow_link(dentry, nd);
}




\
 
 \ /
  Last update: 2015-05-19 05:41    [W:0.156 / U:4.784 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site