diff options
Diffstat (limited to 'kernel/sys.c')
-rw-r--r-- | kernel/sys.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/kernel/sys.c b/kernel/sys.c index 9bdf94f3ae29..9e157e0240d4 100644 --- a/kernel/sys.c +++ b/kernel/sys.c | |||
@@ -1661,8 +1661,19 @@ asmlinkage long sys_setrlimit(unsigned int resource, struct rlimit __user *rlim) | |||
1661 | 1661 | ||
1662 | it_prof_secs = cputime_to_secs(current->signal->it_prof_expires); | 1662 | it_prof_secs = cputime_to_secs(current->signal->it_prof_expires); |
1663 | if (it_prof_secs == 0 || new_rlim.rlim_cur <= it_prof_secs) { | 1663 | if (it_prof_secs == 0 || new_rlim.rlim_cur <= it_prof_secs) { |
1664 | cputime_t cputime = secs_to_cputime(new_rlim.rlim_cur); | 1664 | unsigned long rlim_cur = new_rlim.rlim_cur; |
1665 | cputime_t cputime; | ||
1665 | 1666 | ||
1667 | if (rlim_cur == 0) { | ||
1668 | /* | ||
1669 | * The caller is asking for an immediate RLIMIT_CPU | ||
1670 | * expiry. But we use the zero value to mean "it was | ||
1671 | * never set". So let's cheat and make it one second | ||
1672 | * instead | ||
1673 | */ | ||
1674 | rlim_cur = 1; | ||
1675 | } | ||
1676 | cputime = secs_to_cputime(rlim_cur); | ||
1666 | read_lock(&tasklist_lock); | 1677 | read_lock(&tasklist_lock); |
1667 | spin_lock_irq(¤t->sighand->siglock); | 1678 | spin_lock_irq(¤t->sighand->siglock); |
1668 | set_process_cpu_timer(current, CPUCLOCK_PROF, &cputime, NULL); | 1679 | set_process_cpu_timer(current, CPUCLOCK_PROF, &cputime, NULL); |