[PATCH] file: Add locking to f_getown
43fa1adb · Eric W. Biederman <[email protected]> · 2006-10-02 02:17:27 -07:00
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 <[email protected]>
Cc: Oleg Nesterov <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
- Commit
- 43fa1adb9334bf4585cd53144eb5911488f85bc7
- Parents
- a03fcb73
Changes
1 files changed · +2 −0
diff --git a/fs/fcntl.c b/fs/fcntl.c
index e7c66a1..e4f2616 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;
}