From: ebiederm@xmission.com (Eric W. Biederman)
To: <linux-kernel@vger.kernel.org>
Cc: <vserver@list.linux-vserver.org>,
Herbert Poetzl <herbert@13thfloor.at>,
"Serge E. Hallyn" <serue@us.ibm.com>,
Alan Cox <alan@lxorguk.ukuu.org.uk>,
Dave Hansen <haveblue@us.ibm.com>,
Arjan van de Ven <arjan@infradead.org>,
Suleiman Souhlal <ssouhlal@FreeBSD.org>,
Hubertus Franke <frankeh@watson.ibm.com>,
Cedric Le Goater <clg@fr.ibm.com>,
Kyle Moffett <mrmacman_g4@mac.com>, Kirill Korotaev <dev@sw.ru>,
Greg <gkurz@fr.ibm.com>, Linus Torvalds <torvalds@osdl.org>,
Andrew Morton <akpm@osdl.org>, Greg KH <greg@kroah.com>,
Rik van Riel <riel@redhat.com>,
Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>,
Andrey Savochkin <saw@sawoct.com>,
Kirill Korotaev <dev@openvz.org>, Andi Kleen <ak@suse.de>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Jeff Garzik <jgarzik@pobox.com>,
Trond Myklebust <trond.myklebust@fys.uio.no>,
Jes Sorensen <jes@sgi.com>
Subject: [RFC][PATCH 12/20] fcntl: Update fcntl to work with pspaces.
Date: Mon, 06 Feb 2006 12:54:37 -0700 [thread overview]
Message-ID: <m1d5i0l0ua.fsf_-_@ebiederm.dsl.xmission.com> (raw)
In-Reply-To: <m1hd7cl0yp.fsf_-_@ebiederm.dsl.xmission.com> (Eric W. Biederman's message of "Mon, 06 Feb 2006 12:51:58 -0700")
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
---
fs/fcntl.c | 25 ++++++++++++++++---------
include/linux/fs.h | 1 +
2 files changed, 17 insertions(+), 9 deletions(-)
34f261442c7ac3c160830b86aefd5b15df68de9d
diff --git a/fs/fcntl.c b/fs/fcntl.c
index 5f96786..0a41df8 100644
--- a/fs/fcntl.c
+++ b/fs/fcntl.c
@@ -18,6 +18,7 @@
#include <linux/ptrace.h>
#include <linux/signal.h>
#include <linux/rcupdate.h>
+#include <linux/pspace.h>
#include <asm/poll.h>
#include <asm/siginfo.h>
@@ -248,11 +249,14 @@ static int setfl(int fd, struct file * f
return error;
}
-static void f_modown(struct file *filp, unsigned long pid,
+static void f_modown(struct file *filp, struct pspace *pspace, unsigned long pid,
uid_t uid, uid_t euid, int force)
{
write_lock_irq(&filp->f_owner.lock);
if (force || !filp->f_owner.pid) {
+ put_pspace(filp->f_owner.pspace);
+ get_pspace(pspace);
+ filp->f_owner.pspace = pspace;
filp->f_owner.pid = pid;
filp->f_owner.uid = uid;
filp->f_owner.euid = euid;
@@ -268,7 +272,7 @@ int f_setown(struct file *filp, unsigned
if (err)
return err;
- f_modown(filp, arg, current->uid, current->euid, force);
+ f_modown(filp, current->pspace, arg, current->uid, current->euid, force);
return 0;
}
@@ -276,7 +280,7 @@ EXPORT_SYMBOL(f_setown);
void f_delown(struct file *filp)
{
- f_modown(filp, 0, 0, 0, 1);
+ f_modown(filp, NULL, 0, 0, 0, 1);
}
static long do_fcntl(int fd, unsigned int cmd, unsigned long arg,
@@ -318,6 +322,9 @@ static long do_fcntl(int fd, unsigned in
* to fix this will be in libc.
*/
err = filp->f_owner.pid;
+ /* Don't return an owner in a different pspace */
+ if (filp->f_owner.pspace != current->pspace)
+ err = 0;
force_successful_syscall_return();
break;
case F_SETOWN:
@@ -478,14 +485,14 @@ void send_sigio(struct fown_struct *fown
read_lock(&tasklist_lock);
if (pid > 0) {
- p = find_task_by_pid(pid);
+ p = find_task_by_pid(fown->pspace, pid);
if (p) {
send_sigio_to_task(p, fown, fd, band);
}
} else {
- do_each_task_pid(-pid, PIDTYPE_PGID, p) {
+ do_each_task_pid(fown->pspace, -pid, PIDTYPE_PGID, p) {
send_sigio_to_task(p, fown, fd, band);
- } while_each_task_pid(-pid, PIDTYPE_PGID, p);
+ } while_each_task_pid(fown->pspace, -pid, PIDTYPE_PGID, p);
}
read_unlock(&tasklist_lock);
out_unlock_fown:
@@ -513,14 +520,14 @@ int send_sigurg(struct fown_struct *fown
read_lock(&tasklist_lock);
if (pid > 0) {
- p = find_task_by_pid(pid);
+ p = find_task_by_pid(fown->pspace, pid);
if (p) {
send_sigurg_to_task(p, fown);
}
} else {
- do_each_task_pid(-pid, PIDTYPE_PGID, p) {
+ do_each_task_pid(fown->pspace, -pid, PIDTYPE_PGID, p) {
send_sigurg_to_task(p, fown);
- } while_each_task_pid(-pid, PIDTYPE_PGID, p);
+ } while_each_task_pid(fown->pspace, -pid, PIDTYPE_PGID, p);
}
read_unlock(&tasklist_lock);
out_unlock_fown:
diff --git a/include/linux/fs.h b/include/linux/fs.h
index e059da9..cabb1b6 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -589,6 +589,7 @@ extern struct block_device *I_BDEV(struc
struct fown_struct {
rwlock_t lock; /* protects pid, uid, euid fields */
+ struct pspace *pspace; /* process space of owner pid */
int pid; /* pid or -pgrp where SIGIO should be sent */
uid_t uid, euid; /* uid/euid of process setting the owner */
void *security;
--
1.1.5.g3480
next prev parent reply other threads:[~2006-02-06 19:57 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-02-06 19:19 [RFC][PATCH 0/20] Multiple instances of the process id namespace Eric W. Biederman
2006-02-06 19:22 ` [RFC][PATCH 01/20] pid: Intoduce the concept of a wid (wait id) Eric W. Biederman
2006-02-06 19:27 ` [RFC][PATCH 02/20] pspace: The parent process id of pid 1 is always 0 Eric W. Biederman
2006-02-06 19:29 ` [RFC][PATCH 03/20] pid: Introduce a generic helper to test for init Eric W. Biederman
2006-02-06 19:34 ` [RFC][PATCH 04/20] pspace: Allow multiple instaces of the process id namespace Eric W. Biederman
2006-02-06 19:36 ` [RFC][PATCH 05/20] sched: Fixup the scheduler syscalls to deal with pspaces Eric W. Biederman
2006-02-06 19:39 ` [RFC][PATCH 06/20] cad_pid: Fixup the cad_pid users to assume it is in the initial process id namespace Eric W. Biederman
2006-02-06 19:41 ` [RFC][PATCH 07/20] tty: Update the tty layer to work with pspaces Eric W. Biederman
2006-02-06 19:44 ` [RFC][PATCH 08/20] vt: Update the virtual console to handle pspaces Eric W. Biederman
2006-02-06 19:46 ` [RFC][PATCH 09/20] ptrace: Update ptrace " Eric W. Biederman
2006-02-06 19:49 ` [RFC][PATCH 10/20] capabilities: Update the capabilities code to " Eric W. Biederman
2006-02-06 19:51 ` [RFC][PATCH 11/20] ioprio: Update ioprio " Eric W. Biederman
2006-02-06 19:54 ` Eric W. Biederman [this message]
2006-02-06 19:57 ` [RFC][PATCH 13/20] kthread: Update kthread to work with pspaces Eric W. Biederman
2006-02-06 19:59 ` [RFC][PATCH 14/20] mm: Update vmscan " Eric W. Biederman
2006-02-06 20:00 ` [RFC][PATCH 15/20] posix-timers: Update posix timers " Eric W. Biederman
2006-02-06 20:02 ` [PATCH 16/20] nfs: Don't use pids to track the lockd server process Eric W. Biederman
2006-02-06 20:03 ` [RFC][PATCH 17/20] usb: Fixup usb so it works with pspaces Eric W. Biederman
2006-02-06 20:05 ` [RFC][PATCH 18/20] posix-mqueue: Make mqueues work with pspspaces Eric W. Biederman
2006-02-06 20:07 ` [RFC][PATCH 19/20] pspace: Upcate the pid_max sysctl to work in a per pspace fashion Eric W. Biederman
2006-02-06 20:12 ` [RFC][PATCH 20/20] proc: Update /proc to support multiple pid spaces Eric W. Biederman
2006-02-10 20:40 ` Kirill Korotaev
2006-02-11 10:10 ` Eric W. Biederman
2006-02-06 20:41 ` [RFC][PATCH 17/20] usb: Fixup usb so it works with pspaces Serge E. Hallyn
2006-02-06 20:53 ` Eric W. Biederman
2006-02-07 16:41 ` [RFC][PATCH 04/20] pspace: Allow multiple instaces of the process id namespace William Lee Irwin III
2006-02-07 17:05 ` Eric W. Biederman
2006-02-10 20:30 ` Kirill Korotaev
2006-02-11 9:42 ` Eric W. Biederman
2006-02-11 10:11 ` Eric W. Biederman
2006-02-11 10:43 ` Eric W. Biederman
2006-02-13 8:53 ` Kirill Korotaev
2006-02-13 16:40 ` Dave Hansen
2006-02-11 11:03 ` Eric W. Biederman
2006-02-13 9:02 ` Kirill Korotaev
2006-02-13 21:31 ` Serge E. Hallyn
2006-02-13 23:41 ` Eric W. Biederman
2006-02-11 11:57 ` Eric W. Biederman
2006-02-13 9:22 ` Kirill Korotaev
2006-02-13 17:02 ` Serge E. Hallyn
2006-02-14 5:59 ` Eric W. Biederman
2006-02-14 5:54 ` Eric W. Biederman
2006-02-14 18:45 ` Dave Hansen
2006-02-15 12:07 ` Kirill Korotaev
2006-02-15 13:31 ` Herbert Poetzl
2006-02-16 13:44 ` Serge E. Hallyn
2006-02-20 9:27 ` Kirill Korotaev
2006-02-20 17:04 ` Herbert Poetzl
2006-02-21 16:29 ` Kirill Korotaev
2006-02-21 23:23 ` Herbert Poetzl
2006-02-20 11:29 ` Kirill Korotaev
2006-02-20 12:34 ` Herbert Poetzl
2006-02-20 14:11 ` Kirill Korotaev
2006-02-20 15:08 ` Herbert Poetzl
2006-03-01 22:06 ` Cedric Le Goater
2006-02-15 18:40 ` Eric W. Biederman
2006-02-06 19:56 ` [RFC][PATCH 03/20] pid: Introduce a generic helper to test for init Dave Hansen
2006-02-06 20:22 ` Eric W. Biederman
2006-02-07 15:08 ` Geert Uytterhoeven
2006-02-07 15:17 ` Eric W. Biederman
2006-02-06 19:54 ` [RFC][PATCH 01/20] pid: Intoduce the concept of a wid (wait id) Serge E. Hallyn
2006-02-06 20:23 ` Eric W. Biederman
2006-02-07 17:39 ` Jeff Dike
2006-02-07 18:32 ` Eric W. Biederman
2006-02-10 18:51 ` Kirill Korotaev
2006-02-11 9:25 ` Eric W. Biederman
2006-02-13 8:43 ` Kirill Korotaev
2006-02-14 0:04 ` Eric W. Biederman
2006-02-06 20:40 ` [RFC][PATCH 0/20] Multiple instances of the process id namespace Hubertus Franke
2006-02-06 20:51 ` Eric W. Biederman
2006-02-06 21:07 ` Hubertus Franke
2006-02-06 21:56 ` Eric W. Biederman
2006-02-07 0:48 ` Dave Hansen
2006-02-07 5:14 ` Eric W. Biederman
2006-02-07 9:33 ` Andi Kleen
2006-02-08 4:19 ` Randy.Dunlap
2006-02-08 4:28 ` Eric W. Biederman
2006-02-08 4:51 ` Randy.Dunlap
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m1d5i0l0ua.fsf_-_@ebiederm.dsl.xmission.com \
--to=ebiederm@xmission.com \
--cc=ak@suse.de \
--cc=akpm@osdl.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=arjan@infradead.org \
--cc=benh@kernel.crashing.org \
--cc=clg@fr.ibm.com \
--cc=dev@openvz.org \
--cc=dev@sw.ru \
--cc=frankeh@watson.ibm.com \
--cc=gkurz@fr.ibm.com \
--cc=greg@kroah.com \
--cc=haveblue@us.ibm.com \
--cc=herbert@13thfloor.at \
--cc=jes@sgi.com \
--cc=jgarzik@pobox.com \
--cc=kuznet@ms2.inr.ac.ru \
--cc=linux-kernel@vger.kernel.org \
--cc=mrmacman_g4@mac.com \
--cc=riel@redhat.com \
--cc=saw@sawoct.com \
--cc=serue@us.ibm.com \
--cc=ssouhlal@FreeBSD.org \
--cc=torvalds@osdl.org \
--cc=trond.myklebust@fys.uio.no \
--cc=vserver@list.linux-vserver.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®