diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2009-12-09 22:08:35 +0100 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2010-02-21 20:20:08 +0100 |
commit | 8f4200b312eb06ab405d2c6d0075ce4bebf738dd (patch) | |
tree | 9f9a43782c06f4a8ddad0b83ca47a7b0bf5f9245 | |
parent | 59b446882dbd906785be95cfcc8d8caef1dba08c (diff) | |
download | lwn-8f4200b312eb06ab405d2c6d0075ce4bebf738dd.tar.gz lwn-8f4200b312eb06ab405d2c6d0075ce4bebf738dd.zip |
fs: Add missing rcu protection for __task_cred() in sys_ioprio_get
sys_ioprio_get() accesses __task_cred() without being in a RCU read
side critical section. tasklist_lock is not protecting that when
CONFIG_TREE_PREEMPT_RCU=y.
Add a rcu_read_lock/unlock() section around the code which accesses
__task_cred().
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: David Howells <dhowells@redhat.com>
Cc: James Morris <jmorris@namei.org>
Cc: linux-security-module@vger.kernel.org
Cc: linux-fsdevel@vger.kernel.org
Cc: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r-- | fs/ioprio.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/ioprio.c b/fs/ioprio.c index c7c0b28d7d21..82c40a23afd7 100644 --- a/fs/ioprio.c +++ b/fs/ioprio.c @@ -230,6 +230,7 @@ SYSCALL_DEFINE2(ioprio_get, int, which, int, who) if (!user) break; + rcu_read_lock(); do_each_thread(g, p) { if (__task_cred(p)->uid != user->uid) continue; @@ -241,6 +242,7 @@ SYSCALL_DEFINE2(ioprio_get, int, which, int, who) else ret = ioprio_best(ret, tmpio); } while_each_thread(g, p); + rcu_read_unlock(); if (who) free_uid(user); |