summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorJiri Slaby <jslaby@suse.cz>2009-11-11 17:28:06 +0100
committerJiri Slaby <jslaby@suse.cz>2010-01-06 15:46:35 +0100
commita95f4f4382ec72ff12ebd7087b7770ef4cca9793 (patch)
tree02a403da09bd4490ab02d080325c80b93c649545 /kernel
parent244891bf0e4ee570d08d85b4b271ddc35cce5d22 (diff)
x86: add ia32 compat prlimit syscalls
To support 32/64-bit compatibility (rlimit structure contains 2 longs) for prlimit syscalls, add compat wrappers for them. Signed-off-by: Jiri Slaby <jslaby@suse.cz> Cc: James Morris <jmorris@namei.org> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/compat.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/kernel/compat.c b/kernel/compat.c
index 5a8f5478a766..c820552d0dc4 100644
--- a/kernel/compat.c
+++ b/kernel/compat.c
@@ -364,6 +364,38 @@ asmlinkage long compat_sys_getrlimit (unsigned int resource,
return ret;
}
+asmlinkage long compat_sys_setprlimit(pid_t pid, unsigned int resource,
+ struct compat_rlimit __user *rlim)
+{
+ mm_segment_t old_fs = get_fs();
+ struct rlimit r;
+ int ret;
+
+ ret = get_compat_rlimit(&r, rlim);
+ if (ret)
+ return ret;
+
+ set_fs(KERNEL_DS);
+ ret = sys_setprlimit(pid, resource, (struct rlimit __force __user *)&r);
+ set_fs(old_fs);
+ return ret;
+}
+
+asmlinkage long compat_sys_getprlimit(pid_t pid, unsigned int resource,
+ struct compat_rlimit __user *rlim)
+{
+ mm_segment_t old_fs = get_fs();
+ struct rlimit r;
+ int ret;
+
+ set_fs(KERNEL_DS);
+ ret = sys_getprlimit(pid, resource, (struct rlimit __force __user *)&r);
+ set_fs(old_fs);
+ if (!ret)
+ ret = put_compat_rlimit(&r, rlim);
+ return ret;
+}
+
int put_compat_rusage(const struct rusage *r, struct compat_rusage __user *ru)
{
if (!access_ok(VERIFY_WRITE, ru, sizeof(*ru)) ||