diff options
author | Jiri Slaby <jslaby@suse.cz> | 2009-11-11 17:28:06 +0100 |
---|---|---|
committer | Jiri Slaby <jslaby@suse.cz> | 2010-01-06 15:46:35 +0100 |
commit | a95f4f4382ec72ff12ebd7087b7770ef4cca9793 (patch) | |
tree | 02a403da09bd4490ab02d080325c80b93c649545 /kernel | |
parent | 244891bf0e4ee570d08d85b4b271ddc35cce5d22 (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.c | 32 |
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)) || |