|
@@ -1222,9 +1222,6 @@ static ssize_t fuse_dev_do_read(struct fuse_dev *fud, struct file *file,
|
|
|
struct fuse_in *in;
|
|
|
unsigned reqsize;
|
|
|
|
|
|
- if (task_active_pid_ns(current) != fc->pid_ns)
|
|
|
- return -EIO;
|
|
|
-
|
|
|
restart:
|
|
|
spin_lock(&fiq->waitq.lock);
|
|
|
err = -EAGAIN;
|
|
@@ -1262,6 +1259,13 @@ static ssize_t fuse_dev_do_read(struct fuse_dev *fud, struct file *file,
|
|
|
|
|
|
in = &req->in;
|
|
|
reqsize = in->h.len;
|
|
|
+
|
|
|
+ if (task_active_pid_ns(current) != fc->pid_ns) {
|
|
|
+ rcu_read_lock();
|
|
|
+ in->h.pid = pid_vnr(find_pid_ns(in->h.pid, fc->pid_ns));
|
|
|
+ rcu_read_unlock();
|
|
|
+ }
|
|
|
+
|
|
|
/* If request is too large, reply with an error and restart the read */
|
|
|
if (nbytes < reqsize) {
|
|
|
req->out.h.error = -EIO;
|
|
@@ -1823,9 +1827,6 @@ static ssize_t fuse_dev_do_write(struct fuse_dev *fud,
|
|
|
struct fuse_req *req;
|
|
|
struct fuse_out_header oh;
|
|
|
|
|
|
- if (task_active_pid_ns(current) != fc->pid_ns)
|
|
|
- return -EIO;
|
|
|
-
|
|
|
if (nbytes < sizeof(struct fuse_out_header))
|
|
|
return -EINVAL;
|
|
|
|