summaryrefslogtreecommitdiffstats
path: root/kernel/sys.c
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2009-02-12 17:27:56 +0900
committerPaul Mundt <lethal@linux-sh.org>2009-02-12 17:27:56 +0900
commit41480ae7a383dcffa497decdd97b3cb2caaa18ec (patch)
treef1e3afce2cbd0bbc544cd86a73e5b3093eb081c4 /kernel/sys.c
parent508eb2ce222053e51e2243b7add8eeac85b1d250 (diff)
parent34aeb43e2d3800f4d8f96feb9f1b49cd506679d5 (diff)
downloadkernel-crypto-41480ae7a383dcffa497decdd97b3cb2caaa18ec.tar.gz
kernel-crypto-41480ae7a383dcffa497decdd97b3cb2caaa18ec.tar.xz
kernel-crypto-41480ae7a383dcffa497decdd97b3cb2caaa18ec.zip
Merge branch 'sh/stable-updates'
Diffstat (limited to 'kernel/sys.c')
-rw-r--r--kernel/sys.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/kernel/sys.c b/kernel/sys.c
index e7dc0e10a48..f145c415bc1 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -1525,22 +1525,14 @@ SYSCALL_DEFINE2(setrlimit, unsigned int, resource, struct rlimit __user *, rlim)
return -EINVAL;
if (copy_from_user(&new_rlim, rlim, sizeof(*rlim)))
return -EFAULT;
+ if (new_rlim.rlim_cur > new_rlim.rlim_max)
+ return -EINVAL;
old_rlim = current->signal->rlim + resource;
if ((new_rlim.rlim_max > old_rlim->rlim_max) &&
!capable(CAP_SYS_RESOURCE))
return -EPERM;
-
- if (resource == RLIMIT_NOFILE) {
- if (new_rlim.rlim_max == RLIM_INFINITY)
- new_rlim.rlim_max = sysctl_nr_open;
- if (new_rlim.rlim_cur == RLIM_INFINITY)
- new_rlim.rlim_cur = sysctl_nr_open;
- if (new_rlim.rlim_max > sysctl_nr_open)
- return -EPERM;
- }
-
- if (new_rlim.rlim_cur > new_rlim.rlim_max)
- return -EINVAL;
+ if (resource == RLIMIT_NOFILE && new_rlim.rlim_max > sysctl_nr_open)
+ return -EPERM;
retval = security_task_setrlimit(resource, &new_rlim);
if (retval)