Thread (91 messages) 91 messages, 8 authors, 2018-10-22

Re: [PATCH v7 5/6] seccomp: add a way to pass FDs via a notification fd

From: Jann Horn <jannh@google.com>
Date: 2018-09-28 04:38:04
Also in: linux-fsdevel, lkml

On Fri, Sep 28, 2018 at 12:14 AM Tycho Andersen [off-list ref] wrote:
On Thu, Sep 27, 2018 at 09:28:07PM +0200, Jann Horn wrote:
quoted
On Thu, Sep 27, 2018 at 5:11 PM Tycho Andersen [off-list ref] wrote:
quoted
This patch adds a way to insert FDs into the tracee's process (also
close/overwrite fds for the tracee). This functionality is necessary to
mock things like socketpair() or dup2() or similar, but since it depends on
external (vfs) patches, I've left it as a separate patch as before so the
core functionality can still be merged while we argue about this. Except
this time it doesn't add any ugliness to the API :)
[...]
quoted
+static long seccomp_notify_put_fd(struct seccomp_filter *filter,
+                                 unsigned long arg)
+{
+       struct seccomp_notif_put_fd req;
+       void __user *buf = (void __user *)arg;
+       struct seccomp_knotif *knotif = NULL;
+       long ret;
+
+       if (copy_from_user(&req, buf, sizeof(req)))
+               return -EFAULT;
+
+       if (req.fd < 0 && req.to_replace < 0)
+               return -EINVAL;
+
+       ret = mutex_lock_interruptible(&filter->notify_lock);
+       if (ret < 0)
+               return ret;
+
+       ret = -ENOENT;
+       list_for_each_entry(knotif, &filter->notif->notifications, list) {
+               struct file *file = NULL;
+
+               if (knotif->id != req.id)
+                       continue;
Are you intentionally permitting non-SENT states here? It shouldn't
make a big difference, but I think it'd be nice to at least block the
use of notifications in SECCOMP_NOTIFY_REPLIED state.
Agreed, I'll block everything besides REPLIED.
Do you mean SENT? In REPLIED state, seccomp_notify_put_fd()
is racy because the target task is in the process of waking up, right?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help