Skip to content

Commit

Permalink
coda: Restrict coda messages to the initial pid namespace
Browse files Browse the repository at this point in the history
Remove the slight chance that pids in coda messages will be
interpreted in the wrong pid namespace.

- Explicitly send all pids in coda messages in the initial pid
  namespace.
- Only allow mounts from processes in the initial pid namespace.
- Only allow processes in the initial pid namespace to open the coda
  character device to communicate with coda.

Cc: Jan Harkes <jaharkes@cs.cmu.edu>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
  • Loading branch information
Eric W. Biederman committed Feb 13, 2013
1 parent a0a5386 commit 9fd973e
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 2 deletions.
4 changes: 4 additions & 0 deletions fs/coda/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include <linux/file.h>
#include <linux/vfs.h>
#include <linux/slab.h>
#include <linux/pid_namespace.h>

#include <asm/uaccess.h>

Expand Down Expand Up @@ -157,6 +158,9 @@ static int coda_fill_super(struct super_block *sb, void *data, int silent)
int error;
int idx;

if (task_active_pid_ns(current) != &init_pid_ns)
return -EINVAL;

idx = get_device_index((struct coda_mount_data *) data);

/* Ignore errors in data, for backward compatibility */
Expand Down
4 changes: 4 additions & 0 deletions fs/coda/psdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#include <linux/list.h>
#include <linux/mutex.h>
#include <linux/device.h>
#include <linux/pid_namespace.h>
#include <asm/io.h>
#include <asm/poll.h>
#include <asm/uaccess.h>
Expand Down Expand Up @@ -266,6 +267,9 @@ static int coda_psdev_open(struct inode * inode, struct file * file)
struct venus_comm *vcp;
int idx, err;

if (task_active_pid_ns(current) != &init_pid_ns)
return -EINVAL;

idx = iminor(inode);
if (idx < 0 || idx >= MAX_CODADEVS)
return -ENODEV;
Expand Down
4 changes: 2 additions & 2 deletions fs/coda/upcall.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ static void *alloc_upcall(int opcode, int size)
return ERR_PTR(-ENOMEM);

inp->ih.opcode = opcode;
inp->ih.pid = current->pid;
inp->ih.pgid = task_pgrp_nr(current);
inp->ih.pid = task_pid_nr_ns(current, &init_pid_ns);
inp->ih.pgid = task_pgrp_nr_ns(current, &init_pid_ns);
inp->ih.uid = current_fsuid();

return (void*)inp;
Expand Down

0 comments on commit 9fd973e

Please sign in to comment.