Thread (7 messages) 7 messages, 4 authors, 2019-12-17

Re: [PATCH v3 2/4] pid: Add PIDFD_IOCTL_GETFD to fetch file descriptors from processes

flat view

From: Jann Horn <jannh@google.com>
Date: 2019-12-17 01:13:49
Also in: linux-fsdevel, lkml

On Tue, Dec 17, 2019 at 2:00 AM Sargun Dhillon [off-list ref] wrote:
This adds an ioctl which allows file descriptors to be extracted
from processes based on their pidfd.
[...]
You must have the ability to ptrace the process in order to extract any
file descriptors from it. ptrace can already be used to extract file
descriptors based on parasitic code injections, so the permissions
model is aligned.
[...]
quoted hunk ↗ jump to hunk
+       task = get_pid_task(pid, PIDTYPE_PID);
+       if (!task)
+               return -ESRCH;
+       ret = -EPERM;
Please add something like

if (mutex_lock_killable(&task->signal->cred_guard_mutex))
  goto out;

here, and drop the mutex after fget_task().
quoted hunk ↗ jump to hunk
+       if (!ptrace_may_access(task, PTRACE_MODE_READ_REALCREDS))
+               goto out;
+       ret = -EBADF;
+       file = fget_task(task, args.fd);
+       if (!file)
+               goto out;
+
+       fd = get_unused_fd_flags(fd_flags);
+       if (fd < 0) {
+               ret = fd;
+               goto out_put_file;
+       }
+       /*
+        * security_file_receive must come last since it may have side effects
+        * and cannot be reversed.
+        */
+       ret = security_file_receive(file);
+       if (ret)
+               goto out_put_fd;
+
+       fd_install(fd, file);
+       put_task_struct(task);
+       return fd;
+
+out_put_fd:
+       put_unused_fd(fd);
+out_put_file:
+       fput(file);
+out:
+       put_task_struct(task);
+       return ret;
+}
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help