diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2006-10-02 02:17:27 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-02 07:57:15 -0700 |
commit | 43fa1adb9334bf4585cd53144eb5911488f85bc7 (patch) | |
tree | 64be64424e7db15e1872077f900870895ccac85b /fs/fcntl.c | |
parent | a03fcb730b4fe7da14ca4405f23dbde717b1d2b9 (diff) | |
download | lwn-43fa1adb9334bf4585cd53144eb5911488f85bc7.tar.gz lwn-43fa1adb9334bf4585cd53144eb5911488f85bc7.zip |
[PATCH] file: Add locking to f_getown
This has been needed for a long time, but now with the advent of a
reference counted struct pid there are real consequences for getting this
wrong.
Someone I think it was Oleg Nesterov pointed out that this construct was
missing locking, when I introduced struct pid. After taking time to review
the locking construct already present I figured out which lock needs to be
taken. The other paths that access f_owner.pid take either the f_owner
read or the write lock.
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Cc: Oleg Nesterov <oleg@tv-sign.ru>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/fcntl.c')
-rw-r--r-- | fs/fcntl.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/fcntl.c b/fs/fcntl.c index e7c66a1bf831..e4f26165f12a 100644 --- a/fs/fcntl.c +++ b/fs/fcntl.c @@ -305,9 +305,11 @@ void f_delown(struct file *filp) pid_t f_getown(struct file *filp) { pid_t pid; + read_lock(&filp->f_owner.lock); pid = pid_nr(filp->f_owner.pid); if (filp->f_owner.pid_type == PIDTYPE_PGID) pid = -pid; + read_unlock(&filp->f_owner.lock); return pid; } |