rlimits: allow setrlimit to non-current tasks
authorJiri Slaby <jirislaby@gmail.com>
Fri, 28 Aug 2009 12:08:17 +0000 (14:08 +0200)
committerJiri Slaby <jirislaby@gmail.com>
Fri, 16 Jul 2010 07:48:47 +0000 (09:48 +0200)
commit1c1e618ddd15f69fd87ccea596769f78c8065504
treef6b72aa3e0f1d02728d98810afc1644a1d6f5b8c
parent7855c35da7ba16b389d17710401c4a55a3ea2102
rlimits: allow setrlimit to non-current tasks

Add locking to allow setrlimit accept task parameter other than
current.

Namely, lock tasklist_lock for read and check whether the task
structure has sighand non-null. Do all the signal processing under
that lock still held.

There are some points:
1) security_task_setrlimit is now called with that lock held. This is
   not new, many security_* functions are called with this lock held
   already so it doesn't harm (all this security_* stuff does almost
   the same).
2) task->sighand->siglock (in update_rlimit_cpu) is nested in
   tasklist_lock. This dependence is already existing.
3) tsk->alloc_lock is nested in tasklist_lock. This is OK too, already
   existing dependence.

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Oleg Nesterov <oleg@redhat.com>
kernel/sys.c