rlimits: add task_struct to update_rlimit_cpu
Jiri Slaby [Fri, 28 Aug 2009 12:05:12 +0000 (14:05 +0200)]
Add task_struct as a parameter to update_rlimit_cpu to be able to set
rlimit_cpu of different task than current.

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Acked-by: James Morris <jmorris@namei.org>

include/linux/posix-timers.h
kernel/posix-cpu-timers.c
kernel/sys.c
security/selinux/hooks.c

index 4f71bf4..3e23844 100644 (file)
@@ -117,6 +117,6 @@ void set_process_cpu_timer(struct task_struct *task, unsigned int clock_idx,
 
 long clock_nanosleep_restart(struct restart_block *restart_block);
 
-void update_rlimit_cpu(unsigned long rlim_new);
+void update_rlimit_cpu(struct task_struct *task, unsigned long rlim_new);
 
 #endif
index 9829646..0513900 100644 (file)
  * siglock protection since other code may update expiration cache as
  * well.
  */
-void update_rlimit_cpu(unsigned long rlim_new)
+void update_rlimit_cpu(struct task_struct *task, unsigned long rlim_new)
 {
        cputime_t cputime = secs_to_cputime(rlim_new);
 
-       spin_lock_irq(&current->sighand->siglock);
-       set_process_cpu_timer(current, CPUCLOCK_PROF, &cputime, NULL);
-       spin_unlock_irq(&current->sighand->siglock);
+       spin_lock_irq(&task->sighand->siglock);
+       set_process_cpu_timer(task, CPUCLOCK_PROF, &cputime, NULL);
+       spin_unlock_irq(&task->sighand->siglock);
 }
 
 static int check_clock(const clockid_t which_clock)
index 1ba4522..f5183b0 100644 (file)
@@ -1320,7 +1320,7 @@ SYSCALL_DEFINE2(setrlimit, unsigned int, resource, struct rlimit __user *, rlim)
        if (new_rlim.rlim_cur == RLIM_INFINITY)
                goto out;
 
-       update_rlimit_cpu(new_rlim.rlim_cur);
+       update_rlimit_cpu(current, new_rlim.rlim_cur);
 out:
        return 0;
 }
index e3ce6b4..afb18a9 100644 (file)
@@ -2338,7 +2338,8 @@ static void selinux_bprm_committing_creds(struct linux_binprm *bprm)
                        initrlim = init_task.signal->rlim + i;
                        rlim->rlim_cur = min(rlim->rlim_max, initrlim->rlim_cur);
                }
-               update_rlimit_cpu(current->signal->rlim[RLIMIT_CPU].rlim_cur);
+               update_rlimit_cpu(current,
+                               current->signal->rlim[RLIMIT_CPU].rlim_cur);
        }
 }