diff options
author | Pavel Emelyanov <xemul@openvz.org> | 2008-03-24 12:29:52 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-03-24 19:22:19 -0700 |
commit | a846a1954b6397e844fe1e258af7598897ec6159 (patch) | |
tree | a90b3a593d528c299fd90e9e84fe17a7cdb23733 | |
parent | 4dd4b920218326231156c7991ce5b94afad841c3 (diff) |
bsd_acct: plain current->real_parent access is not always safe
This is minor, but dereferencing even current real_parent is not safe on debug
kernels, since the memory, this points to, can be unmapped - RCU protection is
required.
Besides, the tgid field is deprecated and is to be replaced with task_tgid_xxx
call (the 2nd patch), so RCU will be required anyway.
Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Cc: Oleg Nesterov <oleg@tv-sign.ru>
Cc: "Paul E. McKenney" <paulmck@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | kernel/acct.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/kernel/acct.c b/kernel/acct.c index 521dfa53cb99..7ff5339a3f05 100644 --- a/kernel/acct.c +++ b/kernel/acct.c @@ -482,7 +482,9 @@ static void do_acct_process(struct file *file) #endif #if ACCT_VERSION==3 ac.ac_pid = current->tgid; - ac.ac_ppid = current->real_parent->tgid; + rcu_read_lock(); + ac.ac_ppid = rcu_dereference(current->real_parent)->tgid; + rcu_read_unlock(); #endif spin_lock_irq(¤t->sighand->siglock); |