diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2009-12-09 15:19:31 +0100 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2010-10-30 14:45:25 +0200 |
commit | 3c80fe4ac9cfb13b1bfa4edf1544e8b656716694 (patch) | |
tree | c605435b642323cd76eea9567a43d8c67b9c9db1 /drivers/char/defkeymap.map | |
parent | in untag_chunk() we need to do alloc_chunk() a bit earlier (diff) | |
download | linux-3c80fe4ac9cfb13b1bfa4edf1544e8b656716694.tar.xz linux-3c80fe4ac9cfb13b1bfa4edf1544e8b656716694.zip |
audit: Call tty_audit_push_task() outside preempt disabled
While auditing all tasklist_lock read_lock sites I stumbled over the
following call chain:
audit_prepare_user_tty()
read_lock(&tasklist_lock);
tty_audit_push_task();
mutex_lock(&buf->mutex);
--> buf->mutex is locked with preemption disabled.
Solve this by acquiring a reference to the task struct under
rcu_read_lock and call tty_audit_push_task outside of the preempt
disabled region.
Move all code which needs to be protected by sighand lock into
tty_audit_push_task() and use lock/unlock_sighand as we do not hold
tasklist_lock.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Eric Paris <eparis@redhat.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'drivers/char/defkeymap.map')
0 files changed, 0 insertions, 0 deletions