[PATCH] RLIMIT_CPU: fix handling of a zero limit
At present the kernel doesn't honour an attempt to set RLIMIT_CPU to zero seconds. But the spec says it should, and that's what 2.4.x does. Fixing this for real would involve some complexity (such as adding a new it-has-been-set flag to the task_struct, and testing that everwhere, instead of overloading the value of it_prof_expires). Given that a 2.4 kernel won't actually send the signal until one second has expired anyway, let's just handle this case by treating the caller's zero-seconds as one second. Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Ulrich Weigand <uweigand@de.ibm.com> Cc: Cliff Wickman <cpw@sgi.com> Acked-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
ec9e16bacd
commit
e0661111e5
1 changed files with 12 additions and 1 deletions
13
kernel/sys.c
13
kernel/sys.c
|
@ -1661,8 +1661,19 @@ asmlinkage long sys_setrlimit(unsigned int resource, struct rlimit __user *rlim)
|
|||
|
||||
it_prof_secs = cputime_to_secs(current->signal->it_prof_expires);
|
||||
if (it_prof_secs == 0 || new_rlim.rlim_cur <= it_prof_secs) {
|
||||
cputime_t cputime = secs_to_cputime(new_rlim.rlim_cur);
|
||||
unsigned long rlim_cur = new_rlim.rlim_cur;
|
||||
cputime_t cputime;
|
||||
|
||||
if (rlim_cur == 0) {
|
||||
/*
|
||||
* The caller is asking for an immediate RLIMIT_CPU
|
||||
* expiry. But we use the zero value to mean "it was
|
||||
* never set". So let's cheat and make it one second
|
||||
* instead
|
||||
*/
|
||||
rlim_cur = 1;
|
||||
}
|
||||
cputime = secs_to_cputime(rlim_cur);
|
||||
read_lock(&tasklist_lock);
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
set_process_cpu_timer(current, CPUCLOCK_PROF, &cputime, NULL);
|
||||
|
|
Loading…
Reference in a new issue