From 7285840f8745b467b111a908eb20a1d9b845c98c Mon Sep 17 00:00:00 2001 From: Andrew Morton <akpm@osdl.org> Date: Mon, 12 Apr 2004 01:04:34 -0700 Subject: [PATCH] [PATCH] BSD accounting oops fix oopses have been reported in do_acct_process(), with premption enabled, when threaded applications are exitting. It appears that we're racing with another thread which is nulling out current->tty. I think this race is still there after we moved current->tty into current->signal->tty, so let's take the needed lock. --- kernel/acct.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kernel/acct.c b/kernel/acct.c index 8e32413c41f3..555e1e3c349f 100644 --- a/kernel/acct.c +++ b/kernel/acct.c @@ -347,7 +347,11 @@ static void do_acct_process(long exitcode, struct file *file) /* we really need to bite the bullet and change layout */ ac.ac_uid = current->uid; ac.ac_gid = current->gid; - ac.ac_tty = current->signal->tty ? old_encode_dev(tty_devnum(current->signal->tty)) : 0; + + read_lock(&tasklist_lock); /* pin current->signal */ + ac.ac_tty = current->signal->tty ? + old_encode_dev(tty_devnum(current->signal->tty)) : 0; + read_unlock(&tasklist_lock); ac.ac_flag = 0; if (current->flags & PF_FORKNOEXEC) -- 2.30.9